Java:双击 JSlider 进行重置
我有一个 JSlider,可以设置节拍器的速度,从 40 到 200,其中 120 是默认值,位于中间。
当用户单击节拍器按钮时,节拍器将以 JSlider 上显示的速度播放 - 用户向右拖动滑块,节拍器的速度会增加,如果向左滑动,节拍器的速度会减小。
如何添加功能,以便如果用户双击 JSlider 按钮,它会默认返回到 120 - 中间?
这是我的代码:
public Metronome() {
tempoChooser = new JSlider();
metronomeButton = new JToggleButton();
JLabel metText = new JLabel("Metronome:");
add(metText);
...
tempoChooser.setMaximum(200);
tempoChooser.setMinimum(40);
tempoChooser.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tempoChooserStateChanged(evt);
}
});
add(tempoChooser);
...
}
private void tempoChooserStateChanged(javax.swing.event.ChangeEvent evt) {
final int tempo = tempoChooser.getValue();
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
setMetronomeButtonText(tempo);
} else {
processTempoChange(tempo);
}
}
提前致谢!
I have a JSlider that sets the speed of my metronome, from 40 - 200, where 120 is the default, in the middle.
When the user clicks the metronome button, the metronome plays at the speed displayed on the JSlider - the user drags the slider to the right, the speed of the metronome increases, and it decreases if they slide it to the left.
How do I add functionality so that if the user double-clicks on the JSlider button, it defaults back to 120 - in the middle?
Here is my code:
public Metronome() {
tempoChooser = new JSlider();
metronomeButton = new JToggleButton();
JLabel metText = new JLabel("Metronome:");
add(metText);
...
tempoChooser.setMaximum(200);
tempoChooser.setMinimum(40);
tempoChooser.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tempoChooserStateChanged(evt);
}
});
add(tempoChooser);
...
}
private void tempoChooserStateChanged(javax.swing.event.ChangeEvent evt) {
final int tempo = tempoChooser.getValue();
if (((JSlider) evt.getSource()).getValueIsAdjusting()) {
setMetronomeButtonText(tempo);
} else {
processTempoChange(tempo);
}
}
thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这应该可以帮助您: http://docs.oracle.com/javase /tutorial/uiswing/events/mouselistener.html
您需要阅读并实现 MouseListener。您可以使用 int getClickCount() 来统计用户点击的次数,这将有助于您读取双击次数。
希望这有帮助!
This should help you out: http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html
You need to read up on that and implement MouseListener. You can use
int getClickCount()
to count how many times the user has clicked, which will help you read double clicks.Hope this helps!
尽管我没有看到问题,但我的猜测是您正在寻找
MouseListener
。Even though I dont see a question, my gues is you are looking for
MouseListener
.这不是简单的工作,您必须添加 javax.swing.Timer 并监听在固定时间段内鼠标点击一次或两次,例如
Not simple job, you have to add javax.swing.Timer and listening if during fixed period Mouse cliked once or twice times, for example
我最近写了一些类似的东西,这样我就可以区分单次和双次鼠标左键单击:
I recently wrote something similar so I could differentiate between single and double left mouse-button clicks: