// This file contains excerpts from the textbook Concrete // Abstractions: An Introduction to Computer Science Using Scheme, by // Max Hailperin, Barbara Kaiser, and Karl Knight, Copyright (c) 1998 // by the authors. Full text is available for free at // http://www.gustavus.edu/+max/concrete-abstractions.html import java.awt.*; import java.awt.event.*; public class Compounder extends java.applet.Applet implements ItemListener { private TextArea outputArea; private CompoundingThread compThread; private Checkbox runCheckbox; public Compounder(){ compThread = new CompoundingThread(this); setLayout(new BorderLayout()); Panel controlPanel = new Panel(); add("North", controlPanel); outputArea = new TextArea(); outputArea.setEditable(false); add("Center", outputArea); controlPanel.add(new Label("Initial amount:", Label.RIGHT)); controlPanel.add(new InitialAmountField(1000.00, compThread)); controlPanel.add(new Label("Interest rate:", Label.RIGHT)); controlPanel.add(new InterestRateField(.05, compThread)); runCheckbox = new Checkbox("Run"); runCheckbox.addItemListener(this); controlPanel.add(runCheckbox); compThread.start(); } public void outputLine(String line){ outputArea.append(line + "\n"); } public void clearOutput(){ outputArea.setText(""); } public void stop(){ compThread.disable(); } public void start(){ if(runCheckbox.getState()){ compThread.enable(); } } public void destroy(){ compThread.stop(); } public void itemStateChanged(ItemEvent evt){ if(evt.getStateChange() == ItemEvent.SELECTED){ compThread.enable(); } else { compThread.disable(); } } }