当JSpinner超出范围时,如何更改它?

时间:2014-01-15 11:04:16

标签: java swing netbeans jspinner

JSpinner 具有一定范围,即使这样jSpinner也可以获得超出范围的值。我想要的是,如果实际值超出范围,当我通过他的按钮增加/减少jSpinner时,这会“自动”跳转到最小/最大值。

e.g:

JSpinner s = new JSpinner();
s.setModel(new javax.swing.SpinnerNumberModel(50, 50, 250, 1)); 
//init=50, min=50, max=250, step size=1


//internal modification of s
s.setValue(0);

现在在GUI中我看到0.如果我增加 s ,这应该从50开始。

PS:实际上,如果该值超出范围,我不会增加/减少(在界面处)。

2 个答案:

答案 0 :(得分:2)

您可以覆盖SpinnerNumberModel

的方法
public Object getNextValue() {
     Number original=super.getNextValue();
     //do your transformations here
     return originalTransformed; 
}

答案 1 :(得分:0)

最好的方法可能是在设置给定值之前检查给定值是否在微调器的允许范围内。我使用了类似于以下代码:

import javax.swing.SpinnerNumberModel;
import javax.swing.JSpinner;

private boolean isInRange(int val, JSpinner spinner) {
  SpinnerNumberModel model = (SpinnerNumberModel) spinner.getModel();
  int compareMin = model.getMinimum().compareTo(val), 
    compareMax = model.getMaximum().compareTo(val);

  return (compareMin <= 0 && compareMax >= 0)
}

private void setValue(int val, JSpinner spinner) {
  if (isInRange(val, spinner))
   spinner.setValue(val);
  else {
    Object defaultVal = spinner.getNextValue();
    if (defaultVal != null)
      spinner.setValue(defaultVal)
    else
      spinner.setValue(spinner.getPreviousValue());
  }
}