Java: дважды щелкните JSlider для сброса - PullRequest
3 голосов
/ 05 февраля 2012

У меня есть 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 ]

3 голосов
/ 05 февраля 2012

Это должно помочь вам: http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

Вам нужно прочитать об этом и реализовать MouseListener. Вы можете использовать int getClickCount(), чтобы подсчитать, сколько раз пользователь нажал, что поможет вам прочитать двойной щелчок.

Надеюсь, это поможет!

1 голос
/ 05 февраля 2012

Даже если я не вижу вопроса, я думаю, вы ищете MouseListener.

0 голосов
/ 05 февраля 2012

Я недавно написал нечто подобное, чтобы различать одиночные и двойные щелчки левой кнопкой мыши:

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 */
        }
    }
}
0 голосов
/ 05 февраля 2012

Не простая работа, вы должны добавить javax.swing.Timer и прослушивание, если в течение фиксированного периода мыши щелкают один или два раза, , например,

...