package net.iplantevin.ql.gui.formcomponents;
import net.iplantevin.ql.evaluation.IntVal;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* An IntWidget is a JSpinner that implements the necessary FormFrame functionality.
*
* @author Ivan
*/
public class IntWidget extends JSpinner implements IWidget {
/**
* Constructs a new JSpinner with a SpinnerNumberModel and the given
* AbstractWidgetContainer for UI and listener setup.
*
* @param container the AbstractWidgetContainer to use for the listener and UI setup.
*/
public IntWidget(AbstractWidgetContainer container) {
super(new SpinnerNumberModel(0, 0, 1000000000, 1));
setPreferredSize(container.getPreferredWidgetSize());
setMaximumSize(container.getPreferredWidgetSize());
container.setValue(new IntVal(0));
addChangeListener(new IntWidgetListener(this, container));
}
@Override
public void setJComponentValue(Object value) {
}
@Override
public void setDefaultValue(AbstractWidgetContainer container) {
setValue(0);
container.setValue(new IntVal(0));
}
/**
* Listener that listens to ChangeEvents. Notifies the AbstractWidgetContainer of
* changes.
*/
class IntWidgetListener implements ChangeListener {
final IntWidget widget;
final AbstractWidgetContainer container;
public IntWidgetListener(IntWidget widget, AbstractWidgetContainer container) {
this.widget = widget;
this.container = container;
}
@Override
public void stateChanged(ChangeEvent e) {
Integer value = (Integer) widget.getValue();
container.setValue(new IntVal(value));
container.reEvaluate();
}
}
}