/* * 1.1 version. */ import java.awt.*; import java.awt.event.*; import java.util.*; import java.applet.Applet; public class Converter extends Applet { ConversionPanel metricPanel, usaPanel; Unit[] metricDistances = new Unit[3]; Unit[] usaDistances = new Unit[4]; /** * Create the ConversionPanels (one for metric, another for U.S.). * I used "U.S." because although Imperial and U.S. distance * measurements are the same, this program could be extended to * include volume measurements, which aren't the same. */ public void init() { //Use a GridLayout with 2 rows, as many columns as necessary, //and 5 pixels of padding around all edges of each cell. setLayout(new GridLayout(2,0,5,5)); //Create Unit objects for metric distances, and then //instantiate a ConversionPanel with these Units. metricDistances[0] = new Unit("Centimeters", 0.01); metricDistances[1] = new Unit("Meters", 1.0); metricDistances[2] = new Unit("Kilometers", 1000.0); metricPanel = new ConversionPanel(this, "Metric System", metricDistances); //Create Unit objects for U.S. distances, and then //instantiate a ConversionPanel with these Units. usaDistances[0] = new Unit("Inches", 0.0254); usaDistances[1] = new Unit("Feet", 0.305); usaDistances[2] = new Unit("Yards", 0.914); usaDistances[3] = new Unit("Miles", 1613.0); usaPanel = new ConversionPanel(this, "U.S. System", usaDistances); //Add both ConversionPanels to the Converter. add(metricPanel); add(usaPanel); } /** * Does the conversion from metric to U.S., or vice versa, and * updates the appropriate ConversionPanel. */ void convert(ConversionPanel from) { ConversionPanel to; if (from == metricPanel) to = usaPanel; else to = metricPanel; double multiplier = from.getMultiplier() / to.getMultiplier(); to.setValue(multiplier * from.getValue()); } /** Draws a box around this panel. */ public void paint(Graphics g) { Dimension d = getSize(); g.drawRect(0,0, d.width - 1, d.height - 1); } /** * Puts a little breathing space between * the panel and its contents, which lets us draw a box * in the paint() method. */ public Insets getInsets() { return new Insets(5,5,5,5); } /** Executed only when this program runs as an application. */ public static void main(String[] args) { //Create a new window. Frame f = new Frame("Converter Applet/Application"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //Create a Converter instance. Converter converter = new Converter(); //Initialize the Converter instance. converter.init(); //Add the Converter to the window and display the window. f.add("Center", converter); f.pack(); //Resizes the window to its natural size. f.setVisible(true); } }