Java 每个JButton都有不同的actionListener

Java 每个JButton都有不同的actionListener,java,jbutton,actionlistener,Java,Jbutton,Actionlistener,我在面板上有一个JButton数组,当按下某个按钮时,它将触发并初始化一个类。actionlistener怎么知道我按了哪个按钮来初始化那个类呢?谢谢 public void generateButton(){ buttons[0]=new JButton("First Grade Math"); buttons[1]=new JButton("First Grade English"); buttons[2]=new JButton("Second Grade Math

我在面板上有一个JButton数组,当按下某个按钮时,它将触发并初始化一个类。actionlistener怎么知道我按了哪个按钮来初始化那个类呢?谢谢

public void generateButton(){
    buttons[0]=new JButton("First Grade Math");
    buttons[1]=new JButton("First Grade English");
    buttons[2]=new JButton("Second Grade Math");
    buttons[3]=new JButton("Second Grade English");
    buttons[4]=new JButton("Third Grade Life Science");
    buttons[5]=new JButton("Third Grade Math");
    buttons[6]=new JButton("Fourth Grade Science");
    buttons[7]=new JButton("Fourth Grade Math");
    buttons[8]=new JButton("Fifth Grade Science");
    buttons[9]=new JButton("Fifth Grade History");

    for( int count=0; count<buttons.length; count++){
        buttonPanel.add(buttons[count]);
        buttons[count].addActionListener(listenerForButton);
    }
    add(buttonPanel, BorderLayout.CENTER);
} 

class ButtonListener implements ActionListener{
    private int buttonNum;

    // generate question depend on what button is clicked using switch statement
    public void actionPerformed(ActionEvent e){  
        JButton button1 = (JButton) e.getSource(); //cast object click to JButton variable
        switch(buttonNum){  //fulfill loops/conditional 
        case 0:new FirstGrade("math"); break;
        case 1:new FirstGrade("english"); break;
        case 2:new SecondGrade("math"); break;
        case 3:new SecondGrade("english"); break;
        case 4:new ThirdGrade("Science"); break;
        case 5:new ThirdGrade("Math"); break;
        case 6:new FourthGrade("Science"); break;
        case 7:new FourthGrade("Math"); break;
        case 8:new FifthGrade("Science"); break;
        case 9:new FifthGrade("History"); break;
        }
        theLayout.buttonClick(button1);  //call method to change the color of the button and disable the button from use
        checkCondition();
    }
}
public void generateButton(){
按钮[0]=新的JButton(“一年级数学”);
按钮[1]=新的JButton(“一级英语”);
按钮[2]=新的JButton(“二年级数学”);
按钮[3]=新的JButton(“二级英语”);
按钮[4]=新的JButton(“三级生命科学”);
按钮[5]=新的JButton(“三年级数学”);
按钮[6]=新的JButton(“四年级科学”);
按钮[7]=新的JButton(“四年级数学”);
按钮[8]=新的JButton(“五年级科学”);
按钮[9]=新按钮(“五年级历史”);

对于(int count=0;count有多种方法可以实现这一点

你可以。。。 使用直接方法,将
按钮
s数组中的每个元素与源事件进行比较

public void actionPerformed(ActionEvent e) {
    JButton button1 = (JButton) e.getSource(); //cast object click to JButton variable
    for (int buttonNum = 0; buttonNum < buttons.length; buttonNum++) {
        if (button1 == buttons[buttonNum]) {
            switch (buttonNum) {  //fulfill loops/conditional 
                case 0:
                    new FirstGrade("math");
                    break;
                case 1:
                    new FirstGrade("english");
                    break;
                case 2:
                    new SecondGrade("math");
                    break;
                case 3:
                    new SecondGrade("english");
                    break;
                case 4:
                    new ThirdGrade("Science");
                    break;
                case 5:
                    new ThirdGrade("Math");
                    break;
                case 6:
                    new FourthGrade("Science");
                    break;
                case 7:
                    new FourthGrade("Math");
                    break;
                case 8:
                    new FifthGrade("Science");
                    break;
                case 9:
                    new FifthGrade("History");
                    break;
            }
        }
    }
    theLayout.buttonClick(button1);  //call method to change the color of the button and disable the button from use
    checkCondition();
}
同样,您可以为每个按钮提供一个更简单的
actionCommand
属性,但这取决于您自己


查看和了解更多详细信息

名称中包含
源代码
的方法是否没有给你任何线索?
ActionEvent#getSource
/
ActionEvent#getActionCommand
。查看和了解更多详细信息谢谢!这很有意义!因为我还是java的初学者。在现实世界中哪个方法更有用?或者个人而言,我会为每个按钮使用
操作
,它是一个独立于按钮的独立工作单元,但按钮可以使用它来配置自身(文本/图标)。有关更多详细信息,请参阅
 public void actionPerformed(ActionEvent e){
   if(e.getSource == nameOfYourButton){
     //do stuff
   )
 }
public void actionPerformed(ActionEvent e) {
    JButton button1 = (JButton) e.getSource(); //cast object click to JButton variable
    for (int buttonNum = 0; buttonNum < buttons.length; buttonNum++) {
        if (button1 == buttons[buttonNum]) {
            switch (buttonNum) {  //fulfill loops/conditional 
                case 0:
                    new FirstGrade("math");
                    break;
                case 1:
                    new FirstGrade("english");
                    break;
                case 2:
                    new SecondGrade("math");
                    break;
                case 3:
                    new SecondGrade("english");
                    break;
                case 4:
                    new ThirdGrade("Science");
                    break;
                case 5:
                    new ThirdGrade("Math");
                    break;
                case 6:
                    new FourthGrade("Science");
                    break;
                case 7:
                    new FourthGrade("Math");
                    break;
                case 8:
                    new FifthGrade("Science");
                    break;
                case 9:
                    new FifthGrade("History");
                    break;
            }
        }
    }
    theLayout.buttonClick(button1);  //call method to change the color of the button and disable the button from use
    checkCondition();
}
private JButton[] buttons;

public static final String FIRST_GRADE_MATH = "First Grade Math";
public static final String FIRST_GRADE_ENGLISH = "First Grade English";

public static final String SECOND_GRADE_MATH = "Second Grade Math";
public static final String SECOND_GRADE_ENGLISH = "Second Grade English";

public static final String THIRD_GRADE_MATH = "Third Grade Math";
public static final String THIRD_GRADE_LIFE_SCIENCE = "Third Grade Life Science";

public static final String FOURTH_GRADE_MATH = "Fourth Grade Math";
public static final String FOURTH_GRADE_SCIENCE = "Fourth Grade Science";

public static final String FIFTH_GRADE_SCIENCE = "Fifth Grade Science";
public static final String FIFTH_GRADE_HISTORY = "Fourth Grade History";

public void generateButton() {
    buttons[0] = new JButton(FIRST_GRADE_MATH);
    buttons[1] = new JButton(FIRST_GRADE_ENGLISH);
    buttons[2] = new JButton(SECOND_GRADE_MATH);
    buttons[3] = new JButton(SECOND_GRADE_ENGLISH);
    buttons[4] = new JButton(THIRD_GRADE_MATH);
    buttons[5] = new JButton(THIRD_GRADE_LIFE_SCIENCE);
    buttons[6] = new JButton(FOURTH_GRADE_SCIENCE);
    buttons[7] = new JButton(FOURTH_GRADE_MATH);
    buttons[8] = new JButton(FIFTH_GRADE_HISTORY);
    buttons[9] = new JButton(FIFTH_GRADE_SCIENCE);

    for (int count = 0; count < buttons.length; count++) {
        buttonPanel.add(buttons[count]);
        buttons[count].addActionListener(listenerForButton);
    }
    add(buttonPanel, BorderLayout.CENTER);
}

class ButtonListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        switch (cmd) {
            case FIRST_GRADE_MATH:
                new FirstGrade("math");
                break;
            case FIRST_GRADE_ENGLISH:
                new FirstGrade("english");
                break;
            case SECOND_GRADE_MATH:
                new SecondGrade("math");
                break;
            case SECOND_GRADE_ENGLISH:
                new SecondGrade("english");
                break;
            case THIRD_GRADE_LIFE_SCIENCE:
                new ThirdGrade("Science");
                break;
            case THIRD_GRADE_MATH:
                new ThirdGrade("Math");
                break;
            case FOURTH_GRADE_SCIENCE:
                new FourthGrade("Science");
                break;
            case FOURTH_GRADE_MATH:
                new FourthGrade("Math");
                break;
            case FIFTH_GRADE_SCIENCE:
                new FifthGrade("Science");
                break;
            case FIFTH_GRADE_HISTORY:
                new FifthGrade("History");
                break;
        }
        theLayout.buttonClick(button1);  //call method to change the color of the button and disable the button from use
        checkCondition();
    }
}