【问题标题】:Java: Double-Click a JSlider to ResetJava:双击 JSlider 进行重置
【发布时间】:2012-02-27 08:11:45
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: java swing reset double-click jslider


    【解决方案1】:

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

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

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      即使我没有看到问题,我猜你正在寻找MouseListener

      【讨论】:

      • 查看m92的答案,请不要使用涉及计时器的答案之一。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        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 */
                }
            }
        }
        

        【讨论】:

        • 请不要。 getClickCount() 是你的朋友。
        • @stryba 没错,虽然 getClickCount() 仍然会为每次双击返回两次单击,所以我需要区分这两次单击和“实际”单击。
        • 你是对的,在这种情况下你必须涉及Timer,尽管我认为这应该被Swing以某种方式抽象/抽象。
        猜你喜欢
        • 1970-01-01
        • 2011-01-11
        • 2021-07-21
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 2010-10-07
        相关资源
        最近更新 更多