!636 !modern // includes string == !actionListener { !x619 // standard classes (LetterLayout, CenteredLine) !multi-line strings import java.awt.*; import java.awt.event.*; import java.util.List; main { static JTextArea textArea; static JTextField tfCmd; static new L history; static int historyIdx; psvm { JFrame frame = new JFrame("A JavaX Frame"); JPanel panel = new JPanel(new BorderLayout()); textArea = new JTextArea(); panel.add(BorderLayout.CENTER, new JScrollPane(textArea)); tfCmd = new JTextField(); panel.add(BorderLayout.SOUTH, tfCmd); tfCmd.addActionListener(actionListener { tfCmd.selectAll(); String cmd = tfCmd.getText(); runCmd(cmd); }); frame.addWindowListener(new WindowAdapter() { public void windowOpened(WindowEvent e) { tfCmd.requestFocus(); } }); frame.add(panel); frame.setBounds(100, 100, 500, 400); frame.setVisible(true); exitOnFrameClose(frame); } static void setText(S text) { if (text.equals(textArea.getText())) return; history.add(historyIdx++, textArea.getText()); textArea.setText(text); } static void runCmd(String cmd) { if (cmd == "random chars") { S text = randomLetters(40); setText(text); } else if (cmd == "back") { if (historyIdx > 0) textArea.setText(history.get(--historyIdx)); } else if (cmd == "hello") { setText("hello!"); } else if (cmd == "java class") { setText([[%636 %modern main { static O androidContext; static S programID; psvm { } } ]].replace("%", "!")); } } }