我有一个gui类,它有三个不同的JButtons
链接到一个ActionListener
。
在ActionListener
课程中,我希望这三个JButtons
之间能够以一种允许程序记住"的方式进行互动。之前点击了哪个按钮。
例如:
换句话说,如果button1单击,现在在if子句内部检查button2单击。
现在getActionCommand()
不允许我使用嵌套的if语句,因为它只检查点击的当前按钮并且没有"内存"。
public void actionPerformed(ActionEvent e){
if (Integer.parseInt(e.getActionCommand()) == 0){
System.out.println("This is Jug 0");
// wont be able to print the following
if (Integer.parseInt(e.getActionCommand()) == 1){
System.out.println("This is Jug 1 AFTER jug 0"); //I will never be able to print this
}
}
}
答案 0 :(得分:2)
从我对你正在寻找的东西的理解... ...
因此,实现此目的的一种方法是创建一个布尔值的实例变量,因此如果先前已单击该按钮,则设置为true,然后如果该标志已设置为true,则可以检查方法内部。 这种方法的缺点是,一旦点击一次,该标志将始终为真。您必须实现重置此标志的方法。
private boolean hasButtonOneBeenPressed = false; //set this to true when the button has been clicked
public void actionPerformed(ActionEvent e){
if (Integer.parseInt(e.getActionCommand()) == 0 && !hasButtonOneBeenPressed){
System.out.println("This is Jug 0");
// wont be able to print the following
} else if(Integer.parseInt(e.getActionCommand()) == 1 && hasButtonOneBeenPressed){
System.out.println("This is Jug 1 AFTER jug 0");
} else {
//do something else
}
}
答案 1 :(得分:1)
你已经给出了ActionListener 行为 - 它有一个actionPerformed方法,但是你还没有给它 state - 允许它记住哪里的字段它是什么以及它做了什么。您可能需要一个或两个布尔字段。无论是按下最后一个按钮的JButton字段还是JButton字段 - 都取决于你想要对这些信息做什么。
例如,如果您正在编写一个记忆游戏,那么您可以拥有一个JButton字段来保持按下最后一个按钮。如果actionPerformed上的字段为null,则表示用户正在按第一个按钮,因此您将其分配给该字段。如果按下actionPerformed时该字段持有按钮,则表示您已按下第二个按钮。如果它与第一个不同,则比较图像图标并相应地运行,然后将JButton字段设置为null。
答案 2 :(得分:0)
我只是假设你只想按下最后一个按钮,所以你只需要一个变量来存储你的最后一个按钮。 如果您想要按下完整按钮的历史记录,只需使用添加按下按钮的数组。
PS:这对ActionListeners使用java 8 lambdas。
private void initComponents() {
JButton b1 = new JButton();
JButton b2 = new JButton();
JButton b3 = new JButton();
b1.addActionListener((e)-> onButton1Pressed());
b2.addActionListener((e)-> onButton2Pressed());
b3.addActionListener((e)-> onButton3Pressed());
}
int lastButton = -1;
private void onButton1Pressed() {
switch (lastButton) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
break;
}
lastButton = 1;
}
private void onButton2Pressed() {
switch (lastButton) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
break;
}
lastButton = 2;
}