Java Jslider应该在事件停止时触发更改事件
我的Java Jslider应该在事件停止时触发更改事件,java,swing,jslider,Java,Swing,Jslider,我的JAVA应用程序中有一个滑块。我已经为该滑块编写了更改侦听器。这是我写的代码 jSlider = new JSlider(JSlider.HORIZONTAL,0,30,2); jSlider.setFont(new Font("Dialog", Font.BOLD, 10)); jSlider.setMinorTickSpacing(1); jSlider.setMajorTickSpacing(2); jSlider.set
JAVA
应用程序中有一个滑块。我已经为该滑块编写了更改侦听器。这是我写的代码
jSlider = new JSlider(JSlider.HORIZONTAL,0,30,2);
jSlider.setFont(new Font("Dialog", Font.BOLD, 10));
jSlider.setMinorTickSpacing(1);
jSlider.setMajorTickSpacing(2);
jSlider.setPaintTicks(true);
jSlider.setPaintLabels(true);
jSlider.setBounds(76, 564, 586, 55);
jSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
// TODO Auto-generated method stub
textField.setText(String.valueOf(jSlider.getValue()));
}
});
getContentPane().add(jSlider);
此代码提供滑块的连续变化值
但是我想要滑块的静止位置的值。
我应该写什么来只获取静止位置的值?基本上,您可以在引发
stateChanged
事件和更新textField
之间插入一个“强制延迟”
这基本上意味着在尝试更新textField
之前,我们要等待一段固定的时间,从上次调用stateChanged
方法开始
因为我们不想阻止事件调度线程,因为它会阻止任何新事件的处理,所以我使用了javax.swing.Timer
基本上,每当调用stateChanged
方法时,我都会重新启动计时器。一旦事件停止,计时器将被允许完成并触发一个actionPerformed
事件,该事件允许我们更新textField
…easy;)
现在,我故意使用了一个较大的延迟值,您可能希望使用它
而且,setBounds
是一个非常糟糕的主意。我会把时间花在学习layout manager API上,从长远来看,这会让你省去很多心痛;) 我们也可以使用
jSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
JSlider source = (JSlider)e.getSource();
if(!source.getValueIsAdjusting())
{
//textField.setText(String.valueOf(source.getValue()));
int gain = source.getValue();
//System.out.println("***** GAIN ***** "+gain);
GetGain g = new GetGain(gain);
}
}
});
上面的代码还提供了滑块静止位置的值
jSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
JSlider source = (JSlider)e.getSource();
if(!source.getValueIsAdjusting())
{
//textField.setText(String.valueOf(source.getValue()));
int gain = source.getValue();
//System.out.println("***** GAIN ***** "+gain);
GetGain g = new GetGain(gain);
}
}
});