annotate examples/gui/swing/ConversionPanel.java @ 2:74cc9e431818

Revert change to MidiSynth
author samer
date Fri, 05 Apr 2019 16:43:56 +0100
parents 5df24c91468d
children
rev   line source
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 }