package ql.gui.widget.input; import javax.swing.JComponent; import javax.swing.JTextArea; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import ql.gui.DefaultComponent; import ql.gui.widget.InputWidget; import ql.value.StringValue; public class TextArea extends DefaultComponent implements InputWidget<StringValue>, CaretListener { private JTextArea textArea; public TextArea() { textArea = new JTextArea(); textArea.addCaretListener(this); textArea.setFocusable(true); } public TextArea (StringValue stringValue) { this(); textArea.setText(stringValue.getPrimitive()); } @Override public void disable() { textArea.setEditable(false); } @Override public StringValue getValue() { return new StringValue(textArea.getText()); } public void appendValue(StringValue value) { textArea.append(value.getPrimitive()); textArea.setCaretPosition(textArea.getDocument().getLength()); } @Override public void setValue(StringValue value) { textArea.setText(value.getPrimitive()); } @Override public void updateComponent() { textArea.revalidate(); textArea.repaint(); } @Override public JComponent getComponent() { return textArea; } @Override public void caretUpdate(CaretEvent e) { handleChange(getValue(), this); } }