gpt4 book ai didi

java - JSlider -- 区分 setValue() 和用户输入

转载 作者:行者123 更新时间:2023-12-02 08:57:16 25 4
gpt4 key购买 nike

我试图让 JSlider 根据 MediaPlayer 的播放头(来自另一个设置静态 JSlider 值的类)每秒递增一次。例如,

Window.timeSlider/*static JSlider from other class*/.setValue(/*int current progress of the audio clip*/);

它充当音频文件的时间线。它几乎每一秒都会调用这个。但是,我想从其他类所做的增量更改中单独检测用户输入(当用户手动拖动 slider 时)。当我尝试使用 slider 的 Action 监听器时,我遇到了这个问题:

public void stateChanged(ChangeEvent e) {
if (e.getSource() == timeSlider) {
JSlider src = (JSlider)e.getSource();

if (!src.getValueIsAdjusting()) {
timeSliderChanged = true;
}
}
}

问题在于,当用户更改 slider 时以及 slider 递增时,getValueIsAdjusting() 为 true。以及。这意味着我无法将剪辑调整到用户指定的时间,并且当我释放 slider 时, slider 只是跳回其原始位置。

有什么方法可以区分方法何时改变 slider 以及用户何时改变?

最佳答案

保留一个指示程序更改的私有(private)字段:

private boolean programmaticallyChangingSlider;

// ...

programmaticallyChangingSlider = true;

slider.setValue(newValue);

EventQueue.invokeLater(
() -> { programmaticallyChangingSlider = false; });

ChangeListener 然后可以检查该字段:

public void stateChanged(ChangeEvent e) {
if (e.getSource() == timeSlider) {
if (!programmaticallyChangingSlider) {
// Respond to user input here
}
}
}

关于java - JSlider -- 区分 setValue() 和用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60417678/

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