每个JButton的不同actionListener

时间:2015-12-16 23:16:58

标签: 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");
    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();
    }
}

3 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标......

你可以......

使用直接方式,将button 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属性,默认情况下是按钮的文本...

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();
    }
}

同样,您为每个按钮提供了一个更简单的actionCommand属性,但这取决于您。

有关详细信息,请参阅How to Write an Action ListenersHow to Use Buttons, Check Boxes, and Radio Buttons

答案 1 :(得分:0)

+(NSString *)hmacWithIndicies:(NSString *)plaintext withKey:(NSString *)key {
    NSLog(@"Input text: %@", plaintext);
    NSLog(@"Input Key:  %@", key);

    NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
    NSLog(@"keyData Length: %lu, Data: %@", keyData.length, keyData);

    NSData *inData = [plaintext dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"inData Length: %lu, Data: %@", inData.length, inData);

    NSMutableData *HMACdata = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];

    CCHmac(kCCHmacAlgSHA256, keyData.bytes, keyData.length, inData.bytes, inData.length, (void *)HMACdata.bytes);
    NSLog(@"Hash Mac data generated: %@", HMACdata);

    NSString *b64EncStrHmac = [HMACdata base64EncodedStringWithOptions:0];
    NSLog(@"Hash Mac generated: %@", b64EncStrHmac);

    return b64EncStrHmac;
}

答案 2 :(得分:0)

 public void actionPerformed(ActionEvent e){
   if(e.getSource == nameOfYourButton){
     //do stuff
   )
 }