我试图让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");
}
}
});
这不是我想要的,因为按钮上似乎有一些计时器使它更像是双击。所以我显然使用了错误的方法或其他东西,但我不知道还有其他选择。我希望在第一次点击后再次点击鼠标的速度并不重要。希望有道理。非常感谢任何帮助,谢谢。
答案 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");
}