import java.awt.*; import java.awt.event.*; import java.awt.datatransfer.*; import java.applet.*; public class PhonemePicker2 extends Applet { // updated to use IPA unicode chars public final String[] phonemes = { "\u026A", "i:", "j", "w", "\u02A7", "\u02A4", "e", "\u0251:", "p", "t", "k", "l", "\u00E6", "\u028A", "b", "d", "g", "r", "\u028C", "u:", "m", "n", "\u014B", "h", "\u0252", "\u0254:", "f", "\u0275", "s", "\u0283", "\u0259", "\u025C:", "v", "\u00F0", "z", "\u0292", null, null, null, null, null, null, null, null, null, null, null, null }; { phonemes[ 36 ] = phonemes[ 6 ] + phonemes[ 0 ]; phonemes[ 37 ] = phonemes[ 30 ] + phonemes[ 13 ]; phonemes[ 38 ] = "\u0251" + phonemes[ 0 ]; phonemes[ 39 ] = "\u0251" + phonemes[ 13 ]; phonemes[ 42 ] = "\u0254" + phonemes[ 0 ]; phonemes[ 43 ] = phonemes[ 0 ] + phonemes[ 30 ]; phonemes[ 44 ] = phonemes[ 6 ] + phonemes[ 30 ]; phonemes[ 45 ] = phonemes[ 13 ] + phonemes[ 30 ]; } public final String[] words = { "shIp", // u026A "shEEp", // i + : "Yoghurt", "Watch", "CHurCH", // u02A7 "Jug", // u02A4 "bEd", "cAr", // u0251 + : "Pen", "TenT", "King", "Light", "cAt", // u00E6 "fOOt", // u028A "Bill", "Desk", "Girl", "Road", "cUp", // u028C "mOOn", // u + : "Milk", "Nose", "riNG", // u014B "Hat", "dOg", // u0252 "hORse", // u0254 + : "Fish", "THrow", // u03B8 "Sun", "SHower", // u0283 "doctOR", // u0259 "pURse", // u025C + : "Vase", "moTHer", // u00F0 "Zebra", "treaSURE", //0292 "tAble", "cOAt", "pIpe", "hOUse", null, null, "bOY", "EAR", "bEAR", "jEWEl", null, null }; private final Color darkGreen = new Color( 0, 128, 0 ); private final Color brown = new Color( 128, 64, 64 ); private final Color purple = new Color( 128, 0, 128 ); public final Color[] phonemeColors = { Color.yellow, Color.yellow, darkGreen, darkGreen, Color.cyan, Color.cyan, Color.yellow, Color.yellow, Color.pink, Color.pink, Color.pink, Color.black, Color.yellow, Color.yellow, Color.pink, Color.pink, Color.pink, brown, Color.yellow, Color.yellow, Color.green, Color.green, Color.green, purple, Color.yellow, Color.yellow, purple, purple, purple, purple, Color.yellow, Color.yellow, purple, purple, purple, purple, Color.red, Color.red, Color.red, Color.red, null, null, Color.red, Color.red, Color.red, Color.red, null, null }; private TextArea textfield = null; private Label wordLabel = null; private void tip( String str ) { wordLabel.setText( str ); wordLabel.repaint(); } private void untip() { wordLabel.setText( " " ); wordLabel.repaint(); } public void init() { setBackground( Color.lightGray ); Panel panel = new Panel(); panel.setBackground( Color.black ); int gridWidth = 6; int gridHeight = 8; GridLayout gridLayout = new GridLayout( gridHeight, gridWidth, 1, 1 ); panel.setLayout( gridLayout ); MouseListener mouseAdapter = new MouseAdapter() { public void mouseClicked( MouseEvent me ) { Object source = me.getSource(); Label label = (Label)source; textfield.append( label.getText() ); } public void mouseEntered( MouseEvent me ) { Object source = me.getSource(); Label label = (Label)source; String phoneme = label.getText(); for ( int i = 0; i < phonemes.length; i++ ) { if ( phoneme.equals( phonemes[ i ] ) ) { tip( words[ i ] ); break; } } } public void mouseExited( MouseEvent me ) { untip(); } }; MouseMotionListener mouseMotionAdapter = new MouseMotionAdapter() { public void mouseMoved( MouseEvent me ) { Object source = me.getSource(); Label label = (Label)source; String phoneme = label.getText(); for ( int i = 0; i < phonemes.length; i++ ) { if ( phoneme.equals( phonemes[ i ] ) ) { tip( words[ i ] ); break; } } } }; for ( int i = 0; i < phonemes.length; i++ ) { String phoneme = phonemes[ i ]; Color color = phonemeColors[ i ]; Font font = new Font( "Serif", Font.PLAIN, 24 ); if ( phoneme != null ) { Label label = new Label( phoneme, Label.CENTER ); label.setFont( font ); label.addMouseListener( mouseAdapter ); label.addMouseMotionListener( mouseMotionAdapter ); label.setForeground( color ); label.setBackground( Color.gray ); panel.add( label ); } else { Label label = new Label(""); label.setBackground( Color.gray ); label.setFont( font ); panel.add( label ); // empty label } } BorderLayout layout = new BorderLayout(); setLayout( layout ); String fontName = "SILDoulosIPA-Regular"; Label fontLabel = new Label( "use: " + fontName, Label.CENTER ); textfield = new TextArea( 2, 20 ); textfield.setFont( new Font( fontName, Font.PLAIN, 24 ) ); textfield.setBackground( Color.white ); textfield.setForeground( Color.black ); textfield.setSize( 200, 40 ); Panel sidePanel = new Panel(); Panel controls = new Panel( new GridLayout( 4, 1, 20, 5 ) ); Button copy = new Button( "Copy" ); copy.setActionCommand( "copy" ); Button back = new Button( "Back" ); back.setActionCommand( "back" ); Button clearall = new Button( "Clear All" ); clearall.setActionCommand( "clear all" ); ActionListener actionlistener = new ActionListener() { public void actionPerformed( ActionEvent ae ) { Object source = ae.getSource(); Button button = (Button)source; String action = button.getActionCommand(); if ( action.equals( "copy" ) ) { Toolkit tk = getToolkit(); Clipboard clipboard = tk.getSystemClipboard(); StringSelection text = new StringSelection( textfield.getText() ); clipboard.setContents( text, text ); } else if ( action.equals( "back" ) ) { String text = textfield.getText(); textfield.replaceRange( "", text.length()-1, text.length() ); } else if ( action.equals( "clear all" ) ) { textfield.setText( "" ); } } }; copy.addActionListener( actionlistener ); back.addActionListener( actionlistener ); clearall.addActionListener( actionlistener ); controls.add( copy ); controls.add( back ); controls.add( clearall ); //controls.add( wordLabel ); sidePanel.add( controls ); Panel textPanel = new Panel( new BorderLayout() ); textPanel.add( BorderLayout.NORTH, textfield ); textPanel.add( BorderLayout.SOUTH, fontLabel ); add( BorderLayout.NORTH, textPanel ); add( BorderLayout.EAST, sidePanel ); add( BorderLayout.CENTER, panel ); wordLabel = new Label( "phoneme picker" ); //add( BorderLayout.SOUTH, wordLabel ); } public static void main( String[] args ) { Frame frame = new Frame( "Phonemes" ); WindowAdapter close = new WindowAdapter() { public void windowClosing( WindowEvent we ) { Window win = we.getWindow(); win.dispose(); } public void windowClosed( WindowEvent we ) { System.exit( 0 ); } }; frame.addWindowListener( close ); PhonemePicker2 picker = new PhonemePicker2(); frame.add( picker ); picker.init(); frame.pack(); frame.show(); /*Toolkit tk = frame.getToolkit(); String[] fontList = tk.getFontList(); for ( int i = 0; i < fontList.length; i++ ) { System.out.println( fontList[ i ] ); }*/ } }