GraphemeToColorSynesthesia.java
1    
2    
3    package synesthesia;
4    
5    import painter.SPainter;
6    
7    import java.awt.Color;
8    import java.awt.Point;
9    import javax.swing.JOptionPane;
10   import javax.swing.SwingUtilities;
11   
12   
13   public class GraphemeToColorSynesthesia {
14   
15       private static final int fontsize = 30;
16       private static final String theLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
17       private static String[] letters;
18       private static Color[] colors;
19   
20       private void paintingCode() {
21   
22           SPainter miro = new SPainter("",1200,220);
23           miro.setScreenLocation(30,30);
24           miro.setFontSize(fontsize);
25           initializeColorMap(theLetters);
26   
27           while ( true ) {
28               String input = JOptionPane.showInputDialog(null,
29                       "Please enter a word, or a few words ...");
30               if ( input == null ) { input = "EXIT"; }
31               input = input.toUpperCase();
32               if ( input.equals("EXIT") ) {
33                   break;
34               } else if ( input.equals("REMAP") ) {
35                   initializeColorMap(theLetters);
36                   showLetters(miro,input.toUpperCase());
37               } else {
38                   showLetters(miro,input.toUpperCase());
39               }
40           }
41           miro.end();
42       }
43       private void showLetters(SPainter miro, String input) {
44   
45           eraseWhiteBoard(miro);
46   
47           miro.moveTo(new Point.Double(100,100));
48   
49           for ( int i = 0; i < input.length(); i = i + 1 ) {
50               String letter = input.substring(i, i+1);
51               Color color = getLetterColor(letter);
52               miro.setColor(color);
53               miro.draw(letter);
54               miro.mrt(fontsize);
55           }
56       }
57       private void initializeColorMap(String specialLetters) {
58           letters = new String[specialLetters.length()];
59           colors = new Color[specialLetters.length()];
60           for ( int i = 0; i < letters.length; i = i+1 ) {
61               letters[i] = specialLetters.substring(i, i+1);
62               colors[i] = randomColor();
63           }
64       }
65       private Color getLetterColor(String letter) {
66           for ( int i = 0; i < letters.length; i = i+1 ) {
67               if ( letter.equalsIgnoreCase(letters[i]) ) {
68                   return colors[i];
69               }
70           }
71           return Color.BLACK;
72       }
73       private Color randomColor() {
74           int rv = (int)(Math.random()*256);
75           int gv = (int)(Math.random()*256);
76           int bv = (int)(Math.random()*256);
77           return new Color(rv,gv,bv);
78       }
79       private void eraseWhiteBoard(SPainter miro) {
80           miro.setColor(Color.WHITE);
81           miro.wash();
82           miro.paintFrame(Color.black, 5);
83       }
84   
85   
86       public GraphemeToColorSynesthesia() {
87           paintingCode();
88       }
89   
90       public static void main(String[] args) {
91           SwingUtilities.invokeLater(new Runnable() {
92   
93               public void run() {
94                   new GraphemeToColorSynesthesia();
95               }
96           });
97       }
98   }
99   
100