2015-12-16 5 views
-1

У меня есть массив JButton на панели и нажата некоторая кнопка, это вызовет и инициализирует класс. Как бы ActionListener знать, какая кнопка нажата я инициализировать, что class.Thank выразличный actionListener для каждого JButton

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

ли метод с 'source' в имени не даст вам никаких подсказок? – redFIVE

+0

'ActionEvent # getSource' /' ActionEvent # getActionCommand'. Посмотрите на [Как использовать кнопки, флажки и радио кнопки] (http://docs.oracle.com/javase/tutorial/uiswing/components/button.html) и [Как написать прослушиватели действий] (http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) для получения более подробной информации – MadProgrammer

ответ

0
public void actionPerformed(ActionEvent e){ 
    if(e.getActionCommand().equals("THE TEXT ON YOUR BUTTON")){ 
     //do the action for this button 
    } 
} 
0
public void actionPerformed(ActionEvent e){ 
    if(e.getSource == nameOfYourButton){ 
    //do stuff 
    ) 
} 
1

Есть несколько способов, вы можете достичь этого ...

Вы могли бы ...

Используйте прямой способ, сравнивая каждый элемент в массиве button с событием источника

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 Listeners и How to Use Buttons, Check Boxes, and Radio Buttons для более подробной информации

+0

спасибо! Это имеет смысл! так как я все еще новичок с java. какой метод более полезен в реальном мире. –

+0

Либо и то и другое. Лично я использую «Action» для каждой кнопки, это автономная единица работы, которая не зависит от кнопки, но которую кнопка может использовать для настройки самой (текст/значок). См. [Как использовать действия] (http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) для получения дополнительной информации. – MadProgrammer