3

我有一个 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);
    }
}

提前致谢!

4

4 回答 4

3

这应该可以帮助您:http ://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

您需要阅读并实现 MouseListener。你可以int getClickCount()用来统计用户点击了多少次,这将帮助你阅读双击。

希望这可以帮助!

于 2012-02-05T15:33:17.783 回答
1

尽管我没有看到问题,但我猜你正在寻找MouseListener

于 2012-02-05T15:06:32.203 回答
0

不是简单的工作,您必须添加javax.swing.Timer并在固定期间监听鼠标单击一次或两次,例如

于 2012-02-05T15:41:10.603 回答
0

我最近写了一些类似的东西,所以我可以区分单击鼠标左键和单击鼠标左键:

private Timer timer;
@Override
public void mouseClicked(MouseEvent e) {
    if(e.getButton() == MouseEvent.BUTTON1){
        if (timer == null) {
            timer = new Timer();
            timer.schedule(new TimerTask() {

                @Override
                public void run() { // timer expired before another click received, therefore = single click
                    this.cancel();
                    timer = null;
                    /* single-click actions in here */
                }

            }, (Integer) Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval"));
        }
        else { // received another click before previous click (timer) expired, therefore = double click
            timer.cancel();
            timer = null;
            /* double-click actions in here */
        }
    }
}
于 2012-02-05T15:49:13.977 回答