我有两个JSpinner
设置最小值,另一个设置最大值。
我只希望如果 min 设置了某个值,那么用户不能在最大文本字段中输入小于最小文本字段值,JSpinner
反之亦然。
如何使用 keylistner 和另一个技巧进行验证?
您可以设置自定义微调器模型。数字试试
new JSpinner(new SpinnerNumberModel(initvalue,minvalue,maxvalue));
http://docs.oracle.com/javase/tutorial/uiswing/components/spinner.html
您需要将 a 附加ChangeListener
到每个微调器(模型)。
当stateChanged
事件被触发时,您需要确定事件发生自哪个模型并相应地更新另一个模型。
因此,如果事件来自最小模型,您需要更新最大模型最小值。
请注意,这可能会导致一系列级联更新,因此您需要为此做好准备
您可以使用SpinnerNumberModel
where 设置最小值和最大值
正如MadProgrammer建议的那样,ChangeListener
是正确的方法。
这是一个简单的代码示例:
//class fields
JSpinner lowSpin = new JSpinner(new SpinnerNumberModel());
JSpinner highSpin = new JSpinner(new SpinnerNumberModel());
ChangeListener spinListener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int low = (int) lowSpin.getValue();
int high = (int) highSpin.getValue();
if(high < low)
JOptionPane.showMessageDialog(null, "HIGH should not be less than LOW."); //you can change 'null' to the name of your JFrame
}
};
lowSpin.addChangeListener(spinListener);
highSpin.addChangeListener(spinListener);