如何在ActionListener中使用带有多个JButton的.getSource()

时间:2016-03-24 19:14:40

标签: java jframe jbutton actionlistener

基本上是一个具有少量整数的对象。我希望在按下相应的按钮时更改整数。例如,如果按JButton 2,则第二个int应该根据actionPerformed方法中的if语句中的方法进行更改。不知道我做错了什么但按钮现在什么也没做。

public class Object {

    public int someInt;
    //public int someOtherInt;
    //etc. I have a few different ints that I do the same thing with throughout the code, each JButton changes a different int

    public Object() {

        this.someInt = someInt;

        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        frame.setDefaultCloseOperation(3);
        frame.setSize(325, 180);
        frame.setVisible(true);
        frame.setTitle("Title");

        //String message = blah blah
        JLabel confirmMessage = new JLabel(message);
        JButton button1 = new JButton("1");
        JButton button2 = new JButton("2");
        JButton button3 = new JButton("3");

        //creating action listener and adding it to buttons and adding buttons to frame

    }

    public class listen implements ActionListener {

        private int someInt;
        private int someOtherInt;

        public listen(int someInt, int someOtherInt) {

            this.someInt = someInt;
            this.someOtherInt = someOtherInt;
        }

        public void actionPerformed() {
            if (aE.getSource() == button1) {
                //change someInt
            }
            //same thing for other buttons
        }
    }
}

2 个答案:

答案 0 :(得分:1)

标准做法是为每个按钮附加一个单独的监听器:

// syntax for Java 1.8:
button1.addActionListener(e -> {
  // do whatever
});

// syntax for Java 1.7 and earlier:
button1.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // do whatever
  }
});

答案 1 :(得分:0)

定义操作命令并将其设置为所有按钮。然后在actionPerformed中使用它们来确定点击了哪个按钮。

public class Object {

    private static final String FIRST_ACTION = "firstAction";
    private static final String SECOND_ACTION = "firstAction";


    public Object() {

        JButton button1 = new JButton("1");
        button1.setActionCommand(FIRST_ACTION);

        JButton button2 = new JButton("2");
        button2.setActionCommand(SECOND_ACTION);

        JButton button3 = new JButton("3");

        // creating action listener and adding it to buttons and adding buttons
        // to frame

    }

    public class listen implements ActionListener {

        //some code

        public void actionPerformed(ActionEvent aE) {
            if (aE.getActionCommand().equals(FIRST_ACTION)) {
                // change someInt
            } else if (aE.getActionCommand().equals(SECOND_ACTION)) {

            }
            // same thing for other buttons
        }
    }
}