0

我有两个JSpinner设置最小值,另一个设置最大值。

我只希望如果 min 设置了某个值,那么用户不能在最大文本字段中输入小于最小文本字段值,JSpinner反之亦然。

如何使用 keylistner 和另一个技巧进行验证?

4

4 回答 4

2

您可以设置自定义微调器模型。数字试试

new JSpinner(new SpinnerNumberModel(initvalue,minvalue,maxvalue));

http://docs.oracle.com/javase/tutorial/uiswing/components/spinner.html

于 2012-11-27T11:33:02.493 回答
2

您需要将 a 附加ChangeListener到每个微调器(模型)。

stateChanged事件被触发时,您需要确定事件发生自哪个模型并相应地更新另一个模型。

因此,如果事件来自最小模型,您需要更新最大模型最小值。

请注意,这可能会导致一系列级联更新,因此您需要为此做好准备

于 2012-11-27T11:34:45.003 回答
2

您可以使用SpinnerNumberModelwhere 设置最小值和最大值

于 2012-11-27T11:28:29.460 回答
0

正如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);
于 2012-11-27T14:46:32.870 回答