gpt4 book ai didi

java - 具有 2 个数据源事件处理的 JSlider

转载 作者:行者123 更新时间:2023-12-01 15:15:37 24 4
gpt4 key购买 nike

我的框架上有一个 JSlider 组件,它由外部组件(不时设置新值的媒体播放器)不断更新。我希望 slider 仅在我操作 slider 而不是外部组件时处理 stateChanged 事件。

有什么办法可以实现这一点吗?

最佳答案

我会实现我自己的BoundedRangeModel ,这样您就可以添加额外的标志来指示它是否应该接受更新

用示例更新

基本思想是实现您自己的模型,这样您就可以控制值何时实际更改

public class MyBoundedRangeModel extends DefaultBoundedRangeModel {

private boolean updatesAllowed;

public void setUpdatesAllowed(boolean updatesAllowed) {
this.updatesAllowed = updatesAllowed;
}

public boolean isUpdatesAllowed() {
return updatesAllowed;
}

@Override
public void setMinimum(int n) {
setUpdatesAllowed(true);
super.setMinimum(n);
setUpdatesAllowed(false);
}

@Override
public void setMaximum(int n) {
setUpdatesAllowed(true);
super.setMaximum(n);
setUpdatesAllowed(false);
}

@Override
public void setExtent(int n) {
setUpdatesAllowed(true);
super.setExtent(n);
setUpdatesAllowed(false);
}

@Override
public void setValue(int n) {
super.setValue(n);
}

@Override
public void setValueIsAdjusting(boolean b) {
setUpdatesAllowed(true);
super.setValueIsAdjusting(b);
setUpdatesAllowed(false);
}

@Override
public void setRangeProperties(int newValue, int newExtent, int newMin, int newMax, boolean adjusting) {
if (isUpdatesAllowed()) {
super.setRangeProperties(newValue, newExtent, newMin, newMax, adjusting);
}
}

}

这将允许您控制“value”属性的更改。这里的问题是所有 set 方法都通过 setRangeProperties 方法,因此您需要决定应该允许什么来影响它。在我的示例中,唯一不控制它的方法是 setValue 方法。

在您的代码中,您需要将其称为...

MyBoundedRangeModel boundedRangeModel = new MyBoundedRangeModel();
slider.setModel(boundedRangeModel);

...

boundedRangeModel.setUpdatesAllowed(true);
slider.setValue(value);
boundedRangeModel.setUpdatesAllowed(false);

您唯一的选择是扩展 JSlider 本身并以类似的方式直接重写 setValue 方法

关于java - 具有 2 个数据源事件处理的 JSlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647813/

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