2016-10-11 52 views
0

我有一个gui类,它有三个不同的JButtons链接到一个ActionListenerJava动作监听器和JButtons

ActionListener类中,我希望这三个JButtons之间的交互方式允许程序“记住”之前点击过哪个按钮。

例如:

  1. 如果Button1的点击 - >记住这一点,
  2. 然后,当按钮2被点击下一页:做一个动作相对于BUTTON1被点击。

换句话说,如果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 
    } 
} 
+0

我正在寻找一个比这更优雅的方法,比如可能是内置到动作侦听器中的属性。然而,我最终使用了这种方法,因为它完成了工作,其他答案也是一样的。 – hmz

1

你给了ActionListener的行为 - 它有一个actionPerformed方法,但你还没有给它状态 - 字段,允许它来记住它是什么,它的完成。一个或两个布尔字段可能只是您在这里需要的。无论是那个或者你放置最后一个按钮的JButton字段 - 全部取决于你想要用这个信息做什么。例如,如果你正在编写一个记忆游戏,那么你可以有一个JButton字段来保存最后一个按钮。如果actionPerformed上的字段为null,则知道用户正在按第一个按钮,因此将其分配给该字段。如果该字段在按下actionPerformed时按住按钮,则您知道按下第二个按钮。如果它与第一个不一样,则比较图像图标并作出相应的处理,然后将JButton字段设置为null。

0

我只是假设你只想按最后一个按钮,所以你只需要一个变量来存储你的最后一个按钮。 如果你想要全按钮按下历史记录,只需使用一个数组,您可以添加按下的按钮。

PS:这对ActionListeners使用java 8 lambda表达式。

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; 
} 
+0

你会如何将诸如b1.addActionListener((e))指向像onButton1Pressed())这样的特定方法; – hmz

+0

这行代码是这样做的: b1.addActionListener((e) - > onButton1Pressed()); – Beowolve