如何通知用户他输入的值已被约束到JSpinner下限?

时间:2014-01-02 16:33:11

标签: java swing jspinner

如果用户键入一个超出边界的值,我需要显示一条错误消息而不是更改微调器的值。

如果使用微调按钮,则没有问题。但是,如果用户键入的数字低于下限,则微调器会自动将其设置为下限值。这可能是好的但我需要确保用户知道。

SpinnerNumberModel spin = new SpinnerNumberModel(10, 10, 100, 5);
mySpin = new JSpinner();
mySpin.setModel(spin);

如果用户输入3,则微调器将设置为10.但我需要与用户确认这是他想要的。

EDIT 1

我编写了TIM B的建议。

当我使用微调按钮更改值时,我得到了JOptionPane。但是如果我手动编辑字段,它就不会被触发。

    import javax.swing.JOptionPane;
    import javax.swing.SpinnerNumberModel;

    public class MySpinnerNumberModel extends SpinnerNumberModel{
    public MySpinnerNumberModel(int def, int start, int end, int increment){
        this.setValue(def);
        this.setMinimum(start);
        this.setMaximum(end);
        this.setStepSize(increment);
    }

    public void setValue(Object value) {
        JOptionPane.showMessageDialog(null,"VALUE: "+value);
      super.setValue(value);
      if (value instanceof Integer) {
         int v = (Integer)value;
         //JOptionPane.showMessageDialog(null,"VALUE: "+v);
         // Check v here and act as appropriate
      }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub    
    }    
}

1 个答案:

答案 0 :(得分:2)

您可以提供自己的强制执行边界的实现,并从中显示弹出窗口。我想不出任何方法可以从标准类中做到这一点,但实现自己的模型非常简单。

的JSpinner:

http://docs.oracle.com/javase/7/docs/api/javax/swing/JSpinner.html

它下面有一个SpinnerModel:

http://docs.oracle.com/javase/7/docs/api/javax/swing/SpinnerModel.html

您可能正在使用SpinnerNumberModel:

http://docs.oracle.com/javase/7/docs/api/javax/swing/SpinnerNumberModel.html

不是使用默认的,而是创建自己的子类并覆盖setValue方法:

http://docs.oracle.com/javase/7/docs/api/javax/swing/SpinnerNumberModel.html#setValue%28java.lang.Object%29

要调用super.setValue(),然后如果值太低,则显示警告消息。

class MySpinnerNumberModel extends SpinnerNumberModel {
   // You will need to implement the constructors too

   public void setValue(Object value) {
      super.setValue(value);
      if (value instanceof Integer) {
         int v = (Integer)value;
         // Check v here and act as appropriate
      }
   }
}