gpt4 book ai didi

java - 获取旋转器的当前范围?

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:22 26 4
gpt4 key购买 nike

我的问题很简单,不幸的是我找不到答案。基本上,我有一个 Swing 窗口,带有 2 个 JSpinner。第二个 JSpinner 必须定义第一个 JSpinner 的上限。例如,如果用户在第二个 JSpinner 上输入值 4,则他们不能在第一个 JSpinner 上输入大于 4 的值。如果当前在第一个 JSpinner 中显示的值高于 4,我会将其设置为 4。

因此,我在构造函数中使用 SpinnerNumberModel 构建了两个 JSpinner 来设置初始边界:

// First spinner
SpinnerNumberModel spinnerLimits_sante = new SpinnerNumberModel(3, 0.25, 3, 0.25);
JSpinner spin_sante = new JSpinner(spinnerLimits_sante);

// Second spinner
JSpinner spin_sante_max = new JSpinner(spinnerLimits_sante_max);
SpinnerNumberModel spinnerLimits_sante_max = new SpinnerNumberModel(3, 3, 32767, 1);

为了在第二个 JSpinner 发生变化时获取其值,我考虑在其上使用 ChangeListener 。因此,每次更改时,我都可以获得新值,使用新边界重新创建 SpinnerNumberModel 对象(下限和间隔不会改变,但上限将更新,如果值高于上限,则值将更新)。

ChangeListener listenerSanteMax = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int newBound = spin_sante_max.getValue();
// ...
}
};
spin_sante_max.addChangeListener(listenerSanteMax);

不幸的是,这就是我陷入困境的地方:JSpinner 没有可以返回 SpinnerNumberModel 对象及其值的 getter。而且即使有,似乎也没有二传手。

所以,我的问题是:是否可以动态更改微调器的范围和值?

提前致谢!

最佳答案

ChangeListener中,而不是创建一个新的SpinnerNumberModel ,只需更新现有模型的最大值。有两种方法可以做到这一点。

如果ChangeListener可以看到微调器模型,则可以直接进行更新。

ChangeListener listenerSanteMax = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Number newMaximum = spinnerLimits_sante_max.getNumber().doubleValue();
spinnerLimits_sante.setMaximum((Comparable) newMaximum);
}
};

如果 ChangeListener 无法看到微调器模型,您可以执行 castJSpinner有一个 getModel() 方法,返回一个 SpinnerModel。您可以将其转换为 SpinnerNumberModel,但您应该使用 instanceof 来检查转换是否有效。

ChangeListener listenerSanteMax = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Object source = e.getSource();
if (source instanceof JSpinner) {
JSpinner spinner = (JSpinner) source;
SpinnerModel sm = spinner.getModel();
if (sm instanceof SpinnerNumberModel) {
SpinnerNumberModel model = (SpinnerNumberModel) sm;
Number newMaximum = model.getNumber().doubleValue();
spinnerLimits_sante.setMaximum((Comparable) newMaximum);
}
}
}
};

无论哪种情况,newMaximum 都是 Number ,并且 SpinnerNumberModel 支持的所有子类都是 Comparable

关于java - 获取旋转器的当前范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com