Interpreter1.java
1    
2      /* 
3       * This interpreter is intended to paint different colored dots in a window. 
4       * 
5       * The commands that the interpreter can recognize and respond to are: 
6       *  - BLUE: paint a blue dot 
7       *  - RED: paint a red dot 
8       *  - HELP: show a list of the commands in a dialog message box 
9       *  - EXIT: terminate the program 
10      */
11     package interpreters;
12     import java.awt.Color;
13     import javax.swing.JOptionPane;
14     import javax.swing.SwingUtilities;
15     import painter.SPainter;
16     import shapes.SCircle;
17     public class Interpreter1 {
18         private void interpreter() {
19             // CREATE OBJECTS TO THINK WITH
20             SPainter miro = new SPainter("Dot Thing", 400, 400);
21             miro.setScreenLocation(0, 0);
22             SCircle dot = new SCircle(180);
23   
24             // REPEATEDLY TAKE A COMMAND FROM AN INPUT DIALOG BOX AND INTERPRET IT
25             while (true) {
26                 String command = JOptionPane.showInputDialog(null, "Command?");
27                 if (command == null) {
28                     command = "exit";
29                 } // user clicked on Cancel
30                 if (command.equalsIgnoreCase("blue")) {
31                     miro.setColor(Color.BLUE);
32                     miro.paint(dot);
33                 } else if (command.equalsIgnoreCase("red")) {
34                     miro.setColor(Color.RED);
35                     miro.paint(dot);
36                 } else if (command.equalsIgnoreCase("help")) {
37                     JOptionPane.showMessageDialog(null, "Valid commands are: "
38                             + "RED | BLUE | HELP | EXIT ");
39                 } else if (command.equalsIgnoreCase("exit")) {
40                     miro.end();
41                     System.out.println("Thank you for viewing the dots ...");
42                     break;
43                 } else {
44                     JOptionPane.showMessageDialog(null, "Unrecognizable command: "
45                             + command.toUpperCase());
46                 }
47             }
48         }
49   
50         // INFRASTRUCTURE FOR SOME SIMPLE PAINTING
51         public Interpreter1() {
52             interpreter();
53         }
54   
55         public static void main(String[] args) {
56             SwingUtilities.invokeLater(new Runnable() {
57                 public void run() {
58                     new Interpreter1();
59                 }
60             });
61         }
62     }