samer@1
|
1 /*
|
samer@1
|
2 * 1.1+Swing version.
|
samer@1
|
3 */
|
samer@1
|
4
|
samer@1
|
5 import javax.swing.*;
|
samer@1
|
6 import javax.swing.event.*;
|
samer@1
|
7 import java.awt.*;
|
samer@1
|
8 import java.awt.event.*;
|
samer@1
|
9 import java.util.*;
|
samer@1
|
10 import java.text.NumberFormat;
|
samer@1
|
11
|
samer@1
|
12 public class ConversionPanel extends JPanel {
|
samer@1
|
13 DecimalField textField;
|
samer@1
|
14 JComboBox unitChooser;
|
samer@1
|
15 JSlider slider;
|
samer@1
|
16 ConverterRangeModel sliderModel;
|
samer@1
|
17 Converter controller;
|
samer@1
|
18 Unit[] units;
|
samer@1
|
19 String title;
|
samer@1
|
20 final static boolean DEBUG = false;
|
samer@1
|
21 final static boolean COLORS = false;
|
samer@1
|
22 final static int MAX = 10000;
|
samer@1
|
23
|
samer@1
|
24 ConversionPanel(Converter myController, String myTitle,
|
samer@1
|
25 Unit[] myUnits,
|
samer@1
|
26 ConverterRangeModel myModel) {
|
samer@1
|
27 if (COLORS) {
|
samer@1
|
28 setBackground(Color.cyan);
|
samer@1
|
29 }
|
samer@1
|
30 setBorder(BorderFactory.createCompoundBorder(
|
samer@1
|
31 BorderFactory.createTitledBorder(myTitle),
|
samer@1
|
32 BorderFactory.createEmptyBorder(5,5,5,5)));
|
samer@1
|
33
|
samer@1
|
34 //Save arguments in instance variables.
|
samer@1
|
35 controller = myController;
|
samer@1
|
36 units = myUnits;
|
samer@1
|
37 title = myTitle;
|
samer@1
|
38 sliderModel = myModel;
|
samer@1
|
39
|
samer@1
|
40 //Add the text field. It initially displays "0" and needs
|
samer@1
|
41 //to be at least 10 columns wide.
|
samer@1
|
42 NumberFormat numberFormat = NumberFormat.getNumberInstance();
|
samer@1
|
43 numberFormat.setMaximumFractionDigits(2);
|
samer@1
|
44 textField = new DecimalField(0, 10, numberFormat);
|
samer@1
|
45 textField.setValue(sliderModel.getDoubleValue());
|
samer@1
|
46 textField.addActionListener(new ActionListener() {
|
samer@1
|
47 public void actionPerformed(ActionEvent e) {
|
samer@1
|
48 sliderModel.setDoubleValue(textField.getValue());
|
samer@1
|
49 }
|
samer@1
|
50 });
|
samer@1
|
51
|
samer@1
|
52 //Add the combo box.
|
samer@1
|
53 unitChooser = new JComboBox();
|
samer@1
|
54 for (int i = 0; i < units.length; i++) { //Populate it.
|
samer@1
|
55 unitChooser.addItem(units[i].description);
|
samer@1
|
56 }
|
samer@1
|
57 unitChooser.setSelectedIndex(0);
|
samer@1
|
58 sliderModel.setMultiplier(units[0].multiplier);
|
samer@1
|
59 unitChooser.addActionListener(new ActionListener() {
|
samer@1
|
60 public void actionPerformed(ActionEvent e) {
|
samer@1
|
61 //Set new maximums for the sliders.
|
samer@1
|
62 int i = unitChooser.getSelectedIndex();
|
samer@1
|
63 sliderModel.setMultiplier(units[i].multiplier);
|
samer@1
|
64 controller.resetMaxValues(false);
|
samer@1
|
65 }
|
samer@1
|
66 });
|
samer@1
|
67
|
samer@1
|
68 //Add the slider.
|
samer@1
|
69 slider = new JSlider(sliderModel);
|
samer@1
|
70 sliderModel.addChangeListener(new ChangeListener() {
|
samer@1
|
71 public void stateChanged(ChangeEvent e) {
|
samer@1
|
72 textField.setValue(sliderModel.getDoubleValue());
|
samer@1
|
73 }
|
samer@1
|
74 });
|
samer@1
|
75
|
samer@1
|
76 //Make the textfield/slider group a fixed size.
|
samer@1
|
77 JPanel unitGroup = new JPanel() {
|
samer@1
|
78 public Dimension getMinimumSize() {
|
samer@1
|
79 return getPreferredSize();
|
samer@1
|
80 }
|
samer@1
|
81 public Dimension getPreferredSize() {
|
samer@1
|
82 return new Dimension(150,
|
samer@1
|
83 super.getPreferredSize().height);
|
samer@1
|
84 }
|
samer@1
|
85 public Dimension getMaximumSize() {
|
samer@1
|
86 return getPreferredSize();
|
samer@1
|
87 }
|
samer@1
|
88 };
|
samer@1
|
89 if (COLORS) {
|
samer@1
|
90 unitGroup.setBackground(Color.blue);
|
samer@1
|
91 }
|
samer@1
|
92 unitGroup.setBorder(BorderFactory.createEmptyBorder(
|
samer@1
|
93 0,0,0,5));
|
samer@1
|
94 unitGroup.setLayout(new BoxLayout(unitGroup,
|
samer@1
|
95 BoxLayout.Y_AXIS));
|
samer@1
|
96 unitGroup.add(textField);
|
samer@1
|
97 unitGroup.add(slider);
|
samer@1
|
98
|
samer@1
|
99 setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
|
samer@1
|
100 add(unitGroup);
|
samer@1
|
101 add(unitChooser);
|
samer@1
|
102 unitGroup.setAlignmentY(TOP_ALIGNMENT);
|
samer@1
|
103 unitChooser.setAlignmentY(TOP_ALIGNMENT);
|
samer@1
|
104 }
|
samer@1
|
105
|
samer@1
|
106 /**
|
samer@1
|
107 * Returns the multiplier (units/meter) for the currently
|
samer@1
|
108 * selected unit of measurement.
|
samer@1
|
109 */
|
samer@1
|
110 public double getMultiplier() {
|
samer@1
|
111 return sliderModel.getMultiplier();
|
samer@1
|
112 }
|
samer@1
|
113
|
samer@1
|
114 public double getValue() {
|
samer@1
|
115 return sliderModel.getDoubleValue();
|
samer@1
|
116 }
|
samer@1
|
117 }
|