diff examples/gui/swing/ConversionPanel.java @ 1:5df24c91468d

Oh my what a mess.
author samer
date Fri, 05 Apr 2019 16:26:00 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/gui/swing/ConversionPanel.java	Fri Apr 05 16:26:00 2019 +0100
@@ -0,0 +1,117 @@
+/*
+ * 1.1+Swing version.
+ */
+
+import javax.swing.*;
+import javax.swing.event.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import java.text.NumberFormat;
+
+public class ConversionPanel extends JPanel {
+    DecimalField textField;
+    JComboBox unitChooser;
+    JSlider slider;
+    ConverterRangeModel sliderModel;
+    Converter controller;
+    Unit[] units;
+    String title;
+    final static boolean DEBUG = false;
+    final static boolean COLORS = false;
+    final static int MAX = 10000;
+
+    ConversionPanel(Converter myController, String myTitle, 
+                    Unit[] myUnits,
+                    ConverterRangeModel myModel) {
+        if (COLORS) {
+            setBackground(Color.cyan);
+        }
+        setBorder(BorderFactory.createCompoundBorder(
+                        BorderFactory.createTitledBorder(myTitle),
+                        BorderFactory.createEmptyBorder(5,5,5,5)));
+
+        //Save arguments in instance variables.
+        controller = myController;
+        units = myUnits;
+        title = myTitle;
+        sliderModel = myModel;
+
+        //Add the text field.  It initially displays "0" and needs
+        //to be at least 10 columns wide.
+        NumberFormat numberFormat = NumberFormat.getNumberInstance();
+        numberFormat.setMaximumFractionDigits(2);
+        textField = new DecimalField(0, 10, numberFormat); 
+        textField.setValue(sliderModel.getDoubleValue());
+        textField.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                sliderModel.setDoubleValue(textField.getValue());
+            }
+        });
+
+        //Add the combo box.
+        unitChooser = new JComboBox(); 
+        for (int i = 0; i < units.length; i++) { //Populate it.
+            unitChooser.addItem(units[i].description);
+        }
+        unitChooser.setSelectedIndex(0);
+        sliderModel.setMultiplier(units[0].multiplier);
+        unitChooser.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                //Set new maximums for the sliders.
+                int i = unitChooser.getSelectedIndex();
+                sliderModel.setMultiplier(units[i].multiplier);
+                controller.resetMaxValues(false);
+            }
+        });
+
+        //Add the slider.
+        slider = new JSlider(sliderModel);
+        sliderModel.addChangeListener(new ChangeListener() {
+            public void stateChanged(ChangeEvent e) {
+                textField.setValue(sliderModel.getDoubleValue());
+            }
+        });
+
+        //Make the textfield/slider group a fixed size.
+        JPanel unitGroup = new JPanel() {
+            public Dimension getMinimumSize() {
+                return getPreferredSize();
+            }
+            public Dimension getPreferredSize() {
+                return new Dimension(150,
+                                     super.getPreferredSize().height);
+            }
+            public Dimension getMaximumSize() {
+                return getPreferredSize();
+            }
+        };
+        if (COLORS) {
+            unitGroup.setBackground(Color.blue);
+        }
+        unitGroup.setBorder(BorderFactory.createEmptyBorder(
+                                                0,0,0,5));
+        unitGroup.setLayout(new BoxLayout(unitGroup, 
+                                          BoxLayout.Y_AXIS));
+        unitGroup.add(textField);
+        unitGroup.add(slider);
+
+        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
+        add(unitGroup);
+        add(unitChooser);
+        unitGroup.setAlignmentY(TOP_ALIGNMENT);
+        unitChooser.setAlignmentY(TOP_ALIGNMENT);
+    }
+
+    /** 
+     * Returns the multiplier (units/meter) for the currently
+     * selected unit of measurement.
+     */
+    public double getMultiplier() {
+        return sliderModel.getMultiplier();
+    }
+
+    public double getValue() {
+        return sliderModel.getDoubleValue();
+    }
+}