package nl.uva.polyql.view; import java.awt.Color; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JTextField; import nl.uva.polyql.ast.Question; import nl.uva.polyql.ast.values.InvalidValue; import nl.uva.polyql.ast.values.NumberValue; import nl.uva.polyql.ast.values.Value; public class NumberValueView extends QuestionView { private JTextField mTextField; public NumberValueView(final Question question) { super(question); } @Override protected void init() { mTextField = new JTextField(); mTextField.addKeyListener(new KeyListener() { @Override public void keyTyped(final KeyEvent e) {} @Override public void keyReleased(final KeyEvent e) { Value<?> value; try { value = NumberValue.parse(mTextField.getText()); } catch (final NumberFormatException ex) { value = new InvalidValue(); } onNewInput(value); } @Override public void keyPressed(final KeyEvent e) {} }); } @Override protected JComponent getValueComponent() { return mTextField; } @Override public void setComponentValue(final NumberValue value) { mTextField.setText(value.toString()); } @Override protected void onEditableChanged(final boolean enabled) { mTextField.setEnabled(enabled); } @Override protected void onValidityChanged(final boolean valid) { mTextField.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(valid ? Color.LIGHT_GRAY : Color.RED), BorderFactory.createEmptyBorder(2, 5, 2, 0))); } }