Commit 23badd6c authored by Daniel Schramm's avatar Daniel Schramm
Browse files

Method for addition of formatted text field with buttons implemented

parent dd0d8e0c
Loading
Loading
Loading
Loading
+76 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
@@ -49,6 +50,12 @@ public class ControlPanelBuilder {
    
    public static final int NUMBER_OF_FRACTION_DIGITS = 3;
    
    private static final double PERCENTAGE_VALUE_MINIMUM = 0.0;
    private static final double PERCENTAGE_VALUE_MAXIMUM = 1.0;
    
    public static final String TEXT_FIELD_BUTTON_PRESSED_PLUS = "plus-pressed";
    public static final String TEXT_FIELD_BUTTON_PRESSED_MINUS = "minus-pressed";
    
    private JPanel controlPanel;
    private int row = 0;
    private int col = 0;
@@ -504,6 +511,73 @@ public class ControlPanelBuilder {
        return slider;
    }
    
    public JFormattedTextField addFormattedInputFieldButtoned(IntValueRange range, double stepSize, ActionListener inputAction) {
        GridBagConstraints c = new GridBagConstraints();
        c.gridwidth = 1;
        
        c.anchor = GridBagConstraints.LINE_END;
        JButton minusButton = addButtonCustom("-", null, c);
        JFormattedTextField inputField = addFormattedInputField(range, inputAction);
        c.anchor = GridBagConstraints.LINE_START;
        JButton plusButton = addButtonCustom("+", null, c);
        
        double step;
        if (range == null) { // Percents in [0, 1]
            if (stepSize < 0.0) {
                step = 0.01;
            } else {
                step = stepSize;
            }
        } else { // Range of integers between two given integers
            if (stepSize < 0.0) {
                step = 1.0;
            } else {
                step = Math.round(stepSize);
            }
        }

        minusButton.addActionListener(new AbstractAction() {
            double minimum = range == null ? PERCENTAGE_VALUE_MINIMUM : range.getMinimum();
            
            @Override
            public void actionPerformed(ActionEvent ae) {
                double newValue = parseLocaleDouble(inputField) - step;
                if (newValue < minimum) {
                    return;
                }
                
                inputField.setValue(newValue);
                for (ActionListener listener: inputField.getActionListeners()) {
                    listener.actionPerformed(new ActionEvent(
                            inputField,
                            ActionEvent.ACTION_PERFORMED,
                            TEXT_FIELD_BUTTON_PRESSED_MINUS));
                }
            }
        });
        plusButton.addActionListener(new AbstractAction() {
            double maximum = range == null ? PERCENTAGE_VALUE_MAXIMUM : range.getMaximum();
            
            @Override
            public void actionPerformed(ActionEvent ae) {
                double newValue = parseLocaleDouble(inputField) + step;
                if (newValue > maximum) {
                    return;
                }
                
                inputField.setValue(newValue);
                for (ActionListener listener: inputField.getActionListeners()) {
                    listener.actionPerformed(new ActionEvent(
                            inputField,
                            ActionEvent.ACTION_PERFORMED,
                            TEXT_FIELD_BUTTON_PRESSED_PLUS));
                }
            }
        });
        
        return inputField;
    }
    
    public JFormattedTextField addFormattedInputField(IntValueRange range, ActionListener inputAction) {
        GridBagConstraints c = new GridBagConstraints();
        c.gridwidth = 2;
@@ -521,8 +595,8 @@ public class ControlPanelBuilder {
            format.setRoundingMode(RoundingMode.HALF_UP);
            formatter = new NumberFormatter(format);
            formatter.setValueClass(Double.class);
            formatter.setMinimum(0.0);
            formatter.setMaximum(1.0);
            formatter.setMinimum(PERCENTAGE_VALUE_MINIMUM);
            formatter.setMaximum(PERCENTAGE_VALUE_MAXIMUM);
        } else {
            NumberFormat format = NumberFormat.getInstance();
            formatter = new NumberFormatter(format);