diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java index 6227837d1def1f36f56a49d61b97f825818263f3..b01c59900e74a11539b16d75f35d872730fd2b95 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java @@ -522,6 +522,42 @@ public class ControlPanelBuilder { return slider; } + public JFormattedTextField addFormattedInputField(IntValueRange range, ActionListener inputAction) { + GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = 2; + c.gridx = col; + col += 2; + c.gridy = row; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.BOTH; + + NumberFormatter formatter; + if (range == null) { // percents in [0,1] => use two digit double + NumberFormat format = DecimalFormat.getInstance(Locale.getDefault()); + format.setMinimumFractionDigits(1); + format.setMaximumFractionDigits(NUMBER_OF_FRACTION_DIGITS); + format.setRoundingMode(RoundingMode.HALF_UP); + formatter = new NumberFormatter(format); + formatter.setValueClass(Double.class); + formatter.setMinimum(0.0); + formatter.setMaximum(1.0); + } else { + NumberFormat format = NumberFormat.getInstance(); + formatter = new NumberFormatter(format); + formatter.setValueClass(Integer.class); + formatter.setMinimum(range.getMinimum()); + formatter.setMaximum(range.getMaximum()); + } + formatter.setAllowsInvalid(false); + + JFormattedTextField input = new JFormattedTextField(formatter); + input.setText("0"); + input.addActionListener(inputAction); + controlPanel.add(input, c); + + return input; + } + /** * Adds a scrollable pane that carries the given panel as its content. *