import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.Enumeration; import java.util.Observer; import java.util.Observable; public class GUI extends Applet { // Calculation engine Calc calc; // Status Panel components TextField statusField; Button cancelButton; // Context Panel components boolean ignore; Checkbox standardizationBox; TextField kField; // Main panel components ChuSource inputLeft, inputRight; ChuTarget output; // Operation Button Layout static String[] unaryButtonNames = { "ID", "_|_", "!", "?" }; static String[] binaryButtonNames = { "+", "*", null, ";", "U", null, "&", "#", "-o", "=>" }; // Bottom Panel modes static String[] modes = {"Script", "Edit"}; static final int SCRIPT = 0; static final int EDIT = 1; // INIT: Builds all GUI components, and // sets up their layout and event handling public void init() { // First Build the calculator calc = new Calc(); // Use bigger font for readability Font ourfont = new Font("Helvetica",Font.BOLD,14); setFont(ourfont); // Status Panel Panel statusPanel = new Panel(); statusField = new TextField(50); statusField.setEditable(false); statusPanel.add(new Label("Status")); statusPanel.add(statusField); cancelButton = new Button("CANCEL"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { calc.cancel(); } catch(ExecutionException x) { statusField.setText(x.getMessage()); } } }); statusPanel.add(cancelButton); calc.addObserver(new Observer() { public void update(Observable o, Object arg) { switch(calc.eventCode) { case Calc.BEGIN: if(arg==null) statusField.setText("Executing script"); else statusField.setText("Executing " + (String)arg); break; case Calc.END: statusField.setText("Done"); break; case Calc.FAIL: statusField.setText((String)arg); break; } } }); // Context panel Panel contextPanel = new Panel(); ignore = true; standardizationBox = new Checkbox("Unique"); standardizationBox.setState(true); standardizationBox.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { if(ignore) return; try { calc.calculate((standardizationBox.getState() ? "Unique" : "Multi"), true); } catch(ExecutionException x) { calc.broadcast(Calc.FAIL, x.getMessage()); } } }); contextPanel.add(standardizationBox); kField = new TextField("2"); kField.setEditable(true); kField.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { if(ignore) return; int newK; String kText = kField.getText(); try { newK = Integer.parseInt(kText); calc.calculate(Integer.toString(newK), true); } catch(NumberFormatException x) { calc.broadcast(Calc.FAIL, "can't parse K='"+kText+"'"); } catch(ExecutionException x) { calc.broadcast(Calc.FAIL, x.getMessage()); } } }); contextPanel.add(new Label("K")); contextPanel.add(kField); ignore = false; calc.addObserver(new Observer() { public void update(Observable o, Object arg) { switch(calc.eventCode) { case Calc.BEGIN: break; case Calc.END: // Fall through case Calc.FAIL: ignore = true; Context context = calc.getContext(); boolean std = context.standardization; standardizationBox.setState(std); standardizationBox.setLabel(std ? "Unique" : "Multi"); kField.setText(Integer.toString(context.k)); ignore = false; } } }); // Operation button panels Panel unaryOperButtonPanel = new Panel(new GridBagLayout()); for(int i=0; i

AltStyle によって変換されたページ (->オリジナル) /