package gui.widgets; import javax.swing.JComponent; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import ast.type.Type; import evaluator.StringValue; import evaluator.Value; import evaluator.ValueRepository; import gui.listeners.EvaluateExpression; public class TextFieldWidget implements IWidgetComponent { private final String id; private final Type variableType; private JTextField widget; private final ValueRepository valueRepository; public TextFieldWidget(String id, Type variableType, ValueRepository valueRepository) { this.id = id; this.variableType = variableType; this.valueRepository = valueRepository; this.widget = new JTextField("", 10); } @Override public JComponent getWidget() { return this.widget; } @Override public String getIdWidget() { return this.id; } @Override public Type getWidgetType(){ return this.variableType; } @Override public Value getValue() { return new StringValue(widget.getText()); } @Override public void setValue(Value value) { value = valueRepository.getValue(id); widget.setText("" + value.toString()); } @Override public void setEnabled(boolean isEnabled) { this.widget.setEnabled(isEnabled); } @Override public void addDocListener(final EvaluateExpression evaluator) { widget.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent arg0) { valueRepository.putValue(getIdWidget().toString(), getValue()); } public void insertUpdate(DocumentEvent arg0) { valueRepository.putValue(getIdWidget().toString(), getValue()); } public void removeUpdate(DocumentEvent arg0) { valueRepository.putValue(getIdWidget().toString(), getValue()); } }); } @Override public void setVisible(boolean visibility) { widget.setVisible(visibility); } }