package org.fugazi.ql.gui.widgets;
import org.fugazi.ql.evaluator.expression_value.ExpressionValue;
import org.fugazi.ql.evaluator.expression_value.IntValue;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.NumberFormatter;
import java.text.NumberFormat;
public class IntegerOnlyTextBox extends AbstractWidget {
private static int COLUMNS = 7;
private static int MIN_NUM = -1000000;
private static int MAX_NUM = 1000000;
private JFormattedTextField input;
private NumberFormatter numberFormatter;
public IntegerOnlyTextBox(String _label) {
JLabel label = new JLabel(_label);
NumberFormat intFormat = NumberFormat.getIntegerInstance();
intFormat.setGroupingUsed(false);
intFormat.setParseIntegerOnly(true);
numberFormatter = new NumberFormatter(intFormat);
numberFormatter.setValueClass(Integer.class);
numberFormatter.setAllowsInvalid(false);
numberFormatter.setMinimum(MIN_NUM);
numberFormatter.setMaximum(MAX_NUM);
numberFormatter.setOverwriteMode(true);
this.input = new JFormattedTextField(numberFormatter);
this.input.setColumns(COLUMNS);
this.component.add(label);
this.component.add(input);
}
@Override
public void addEventListener(WidgetsEventListener _listener) {
this.input.getDocument().addDocumentListener(
new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
_listener.stateChanged();
}
public void removeUpdate(DocumentEvent e) {}
public void changedUpdate(DocumentEvent e) {}
}
);
}
@Override
public IntValue getWidgetValue() {
return new IntValue(Integer.parseInt(this.input.getText()));
}
@Override
public void setWidgetValue(ExpressionValue _value) {
IntValue value = (IntValue) _value;
this.input.setText(Integer.toString(value.getValue()));
}
@Override
public void setReadOnly(boolean _isReadonly) {
this.input.setEditable(false);
numberFormatter.setAllowsInvalid(true);
}
}