Java Action Listener和JButtons

时间:2016-10-11 19:14:11

标签: java swing jbutton actionlistener actionevent

我有一个gui类,它有三个不同的JButtons链接到一个ActionListener

ActionListener课程中,我希望这三个JButtons之间能够以一种允许程序记住"的方式进行互动。之前点击了哪个按钮。

例如:

  1. 如果点击了button1 - >记得这个,
  2. 然后当下一次点击button2时:执行相对于click1单击的操作。
  3. 换句话说,如果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
        }
      }
    }
    

3 个答案:

答案 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;
}