Отдельные действия при каждом щелчке мышью - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь заставить Java выполнять одно действие после одного клика, а затем другое, когда та же кнопка нажимается снова, независимо от того, сколько времени между щелчками.Это возможно?Вот что я попробовал до сих пор:

button.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount()%2 == 1) {
            System.out.println("You have clicked once");
        }

        if(e.getClickCount()%2 == 0){
            System.out.println("You have clicked twice");
        }
    }
});

Это не то, что мне нужно, потому что, кажется, на кнопке есть таймер, чтобы сделать его более похожим на двойной щелчок.Поэтому я, очевидно, использую неправильный метод или что-то еще, но я не знаю, какие есть другие варианты.Я хочу, чтобы не имело значения, насколько быстро вы щелкаете мышью снова после первого щелчка.Надеюсь, что это имеет смысл.Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 3 ]

6 голосов
/ 01 апреля 2012

Вы можете сделать это с помощью флага.Что-то вроде:

private boolean isFirstClick = true;

// ...

button.addMouseListener(new MouseAdapter()
{
    public void mouseClicked(MouseEvent e)
    {
        if(isFirstClick)
        {
             System.out.println("You have clicked once");
             isFirstClick = false;
        }
        else
        {
             System.out.println("You have clicked twice");
             isFirstClick = true;
        }
    }
});
1 голос
/ 01 апреля 2012

Вы также можете создать кнопку n-state следующим образом:

JButton button = new JButton() {
  private int state = 0;
  private int maxStates=3;
  {
    addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        if (state>=maxStates) state=0;
        switch (state++) {
          case 0:
            System.out.println("State 0");
            break;
          case 1:
            System.out.println("State 1");
            break;
          case 2:
            System.out.println("State 2");
            break;
        }
      }
    });
  }
};
0 голосов
/ 22 октября 2014

Поскольку никто не ответил, я подумал, что смогу решить эту проблему.

Это можно сделать, установив имя кнопки или текст кнопки или любое другое свойство по своему усмотрению, чтобы оно обновлялось при каждом щелчке мыши и использовалось в операторе if else по мере необходимости.Например:

if(button.getText().equalsIgnoreCase("Lock")) {
    mainWindowPanel.setVisible(false);
    button.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/lock-open.png")));
    button.setText("Unlock");
} else {
    mainWindowPanel.setVisible(true);
    button.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/lock.png")));
    button.setText("Lock");
}
...