每次单击鼠标时单独执行操作

时间:2012-03-31 23:31:04

标签: java swing mouseevent mouse-listeners

我试图让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 个答案:

答案 0 :(得分:6)

您可以使用标志来完成。类似的东西:

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 :(得分:1)

你也可以像这样创建一个n状态按钮:

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;
        }
      }
    });
  }
};

答案 2 :(得分:0)

由于没有人回答我以为我会把解决方案解决这个问题。

这可以通过设置按钮名称或按钮文本或任何其他属性来完成,每次单击鼠标都会更新,并根据需要在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");
}