package net.iplantevin.ql.gui.formcomponents;
import net.iplantevin.ql.evaluation.StrVal;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* A JTextField-based widget with an ActionListener implementing the necessary
* FormFrame actions.
*
* @author Ivan
*/
public class StrWidget extends JTextField implements IWidget {
/**
* Constructs a default JTextfield with the given container for UI and
* listener setup.
*
* @param container the AbstractWidgetContainer to use for the listener and UI setup.
*/
public StrWidget(AbstractWidgetContainer container) {
setPreferredSize(container.getPreferredWidgetSize());
setMaximumSize(container.getPreferredWidgetSize());
container.setValue(new StrVal(""));
addActionListener(new StrWidgetListener(this, container));
}
@Override
public void setJComponentValue(Object value) {
}
@Override
public void setDefaultValue(AbstractWidgetContainer container) {
setText("");
container.setValue(new StrVal(""));
}
/**
* Listener that listens to ActionEvents. Notifies the AbstractWidgetContainer of
* changes.
*/
class StrWidgetListener implements ActionListener {
final StrWidget widget;
final AbstractWidgetContainer container;
public StrWidgetListener(StrWidget widget, AbstractWidgetContainer container) {
this.widget = widget;
this.container = container;
}
@Override
public void actionPerformed(ActionEvent e) {
container.setValue(new StrVal(widget.getText()));
container.reEvaluate();
}
}
}