| 1 | package tmcsim.simulationmanager.model; |
|---|
| 2 | |
|---|
| 3 | import java.awt.Dimension; |
|---|
| 4 | import java.text.NumberFormat; |
|---|
| 5 | import java.util.Hashtable; |
|---|
| 6 | |
|---|
| 7 | import javax.swing.Box; |
|---|
| 8 | import javax.swing.BoxLayout; |
|---|
| 9 | import javax.swing.JFormattedTextField; |
|---|
| 10 | import javax.swing.JLabel; |
|---|
| 11 | import javax.swing.JSlider; |
|---|
| 12 | import javax.swing.event.ChangeEvent; |
|---|
| 13 | import javax.swing.event.ChangeListener; |
|---|
| 14 | import javax.swing.text.NumberFormatter; |
|---|
| 15 | |
|---|
| 16 | import tmcsim.cadmodels.CMSDiversion; |
|---|
| 17 | |
|---|
| 18 | /** |
|---|
| 19 | * The CMSDiversionSliderBox is a GUI component that is used to create |
|---|
| 20 | * the diversion slider that allows the user to select a diversion percentage. |
|---|
| 21 | * This object represents a single possible diversion for a CMS. |
|---|
| 22 | * |
|---|
| 23 | * @author Matthew Cechini |
|---|
| 24 | * @version |
|---|
| 25 | */ |
|---|
| 26 | @SuppressWarnings("serial") |
|---|
| 27 | public class CMSDiversionSliderBox extends Box implements ChangeListener { |
|---|
| 28 | |
|---|
| 29 | /** CMSDiversion object with data for this diversion slider. */ |
|---|
| 30 | private CMSDiversion diversionObject; |
|---|
| 31 | |
|---|
| 32 | /** Slider to allow user to adjust the diversion percentage. */ |
|---|
| 33 | private JSlider diversionSlider; |
|---|
| 34 | |
|---|
| 35 | /** Formatted Text Field to display current percentage. */ |
|---|
| 36 | private JFormattedTextField textField; |
|---|
| 37 | |
|---|
| 38 | /** Maximum allowed diversion percentage. */ |
|---|
| 39 | private int maxDiversion; |
|---|
| 40 | |
|---|
| 41 | /** Label table for diversion slider. */ |
|---|
| 42 | private Hashtable<Integer, JLabel> diversionLabelTable = null; |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | /** |
|---|
| 46 | * Constructor. Initialize GUI components. Create the diversion |
|---|
| 47 | * slider with a maximum value equal to the maximum diversion |
|---|
| 48 | * percentage in the parameter CMSDiversion object. |
|---|
| 49 | * |
|---|
| 50 | * @param newDivObj CMS diversion data to be displayed. |
|---|
| 51 | */ |
|---|
| 52 | public CMSDiversionSliderBox(CMSDiversion newDivObj) { |
|---|
| 53 | super(BoxLayout.Y_AXIS); |
|---|
| 54 | setAlignmentX(Box.CENTER_ALIGNMENT); |
|---|
| 55 | |
|---|
| 56 | diversionObject = newDivObj; |
|---|
| 57 | maxDiversion = diversionObject.maxDiversionPercent.intValue(); |
|---|
| 58 | |
|---|
| 59 | diversionLabelTable = new Hashtable<Integer, JLabel>(); |
|---|
| 60 | diversionLabelTable.put(new Integer(0), new JLabel("0%")); |
|---|
| 61 | diversionLabelTable.put(new Integer(maxDiversion), |
|---|
| 62 | new JLabel(String.valueOf(maxDiversion) + "%")); |
|---|
| 63 | |
|---|
| 64 | NumberFormat numberFormat = NumberFormat.getPercentInstance(); |
|---|
| 65 | NumberFormatter formatter = new NumberFormatter(numberFormat); |
|---|
| 66 | formatter.setMinimum(new Integer(0)); |
|---|
| 67 | formatter.setMaximum(new Integer(maxDiversion)); |
|---|
| 68 | |
|---|
| 69 | textField = new JFormattedTextField(formatter); |
|---|
| 70 | textField.setValue(new Integer(0)); |
|---|
| 71 | textField.setColumns(5); |
|---|
| 72 | textField.setAlignmentX(Box.CENTER_ALIGNMENT); |
|---|
| 73 | textField.setMaximumSize(new Dimension(50, 25)); |
|---|
| 74 | textField.setMinimumSize(new Dimension(40, 25)); |
|---|
| 75 | |
|---|
| 76 | diversionSlider = new JSlider(JSlider.VERTICAL, 0, maxDiversion, 0); |
|---|
| 77 | diversionSlider.addChangeListener(this); |
|---|
| 78 | diversionSlider.setAlignmentX(Box.CENTER_ALIGNMENT); |
|---|
| 79 | diversionSlider.setPaintTicks(true); |
|---|
| 80 | diversionSlider.setPaintLabels(true); |
|---|
| 81 | diversionSlider.setMinorTickSpacing(10); |
|---|
| 82 | diversionSlider.setLabelTable(diversionLabelTable); |
|---|
| 83 | diversionSlider.setValue(diversionObject.getCurrDiv()); |
|---|
| 84 | |
|---|
| 85 | add(textField); |
|---|
| 86 | add(diversionSlider); |
|---|
| 87 | } |
|---|
| 88 | |
|---|
| 89 | /** |
|---|
| 90 | * Set the CMSDiversion object's diversion percentage to the |
|---|
| 91 | * new value on the slider. |
|---|
| 92 | */ |
|---|
| 93 | public void apply() { |
|---|
| 94 | diversionObject.setCurrDiv(diversionSlider.getValue()); |
|---|
| 95 | } |
|---|
| 96 | |
|---|
| 97 | /** |
|---|
| 98 | * ChangeListener method. When the slider changes, update the |
|---|
| 99 | * formatted text field with the new percentage. |
|---|
| 100 | */ |
|---|
| 101 | public void stateChanged(ChangeEvent e) { |
|---|
| 102 | |
|---|
| 103 | float newDiv = diversionSlider.getValue(); |
|---|
| 104 | |
|---|
| 105 | if (!diversionSlider.getValueIsAdjusting()) { |
|---|
| 106 | textField.setValue(new Float(newDiv / 100f)); |
|---|
| 107 | } else { |
|---|
| 108 | textField.setText(String.valueOf((int) newDiv) + "%"); |
|---|
| 109 | } |
|---|
| 110 | } |
|---|
| 111 | } |
|---|