package nodebox.client.port; import nodebox.node.Port; import nodebox.ui.DraggableNumber; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; import java.util.Locale; public class IntControl extends AbstractPortControl implements ChangeListener, ActionListener { private DraggableNumber draggable; public IntControl(String nodePath, Port port) { super(nodePath, port); setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0)); draggable = new DraggableNumber(); draggable.addChangeListener(this); NumberFormat intFormat = NumberFormat.getNumberInstance(Locale.US); intFormat.setMinimumFractionDigits(0); intFormat.setMaximumFractionDigits(0); draggable.setNumberFormat(intFormat); draggable.setMinimumValue(port.getMinimumValue()); draggable.setMaximumValue(port.getMaximumValue()); setPreferredSize(draggable.getPreferredSize()); add(draggable); setValueForControl(port.getValue()); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); draggable.setEnabled(enabled); } public void setValueForControl(Object v) { if (v instanceof Integer) { draggable.setValue((Integer) v); } else if (v instanceof Long) { draggable.setValue((Long) v); } else { throw new IllegalArgumentException("This function only accept integers or longs, not " + v); } } public void stateChanged(ChangeEvent e) { setValueFromControl(); } public void actionPerformed(ActionEvent e) { setValueFromControl(); } private void setValueFromControl() { double doubleValue = draggable.getValue(); int intValue = (int) doubleValue; setPortValue(intValue); } }