2013-01-31 22 views
0

您好,我在將單個監聽器鏈接到多個按鈕時遇到問題。我試圖使用內部類,但似乎我得到了錯誤的地方。有人能指引我走向正確的方向嗎? 如果有幫助的自動更正啄(:d)指向第59行說:將單個監聽器鏈接到多個按鈕

「createChampButton不能被解析爲一個變量」

代碼:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 




public class GUI extends JApplet{ 



    public void init(){ 
     Container guiContainer = getContentPane(); 
     LayoutManager layout = new FlowLayout(); 
     guiContainer.setLayout(layout); 


     //Create Championship Button 
     final JButton createChampButton = new JButton("Create Championship"); 
     guiContainer.add(createChampButton); 



     //Create Club Button 
     final JButton createClubButton = new JButton ("Create Club"); 
     guiContainer.add(createClubButton); 


     //Create Athlete Button 
     final JButton createAthleteButton = new JButton ("Create Athlete"); 
     guiContainer.add(createAthleteButton); 


     //Print Athletes Button 
     final JButton printAthletesButton = new JButton ("Print all Athletes"); 
     guiContainer.add(printAthletesButton); 


     //The quiet Listener 
     ButtonListener aListener = new ButtonListener(); 
     printAthletesButton.addActionListener(aListener); 
     createAthleteButton.addActionListener(aListener); 
     createClubButton.addActionListener(aListener); 
     createChampButton.addActionListener(aListener); 

    } 

    class ButtonListener implements ActionListener { 
     public void actionPerformed(ActionEvent event){ 
      JButton button = (JButton) event.getSource(); 
      //if (button.equals(printAthletesButton)){ 
       //JOptionPane.showMessageDialog(null, "Athlete name is: " +anAthlete.GetAthleteName()); 
      // JOptionPane.showMessageDialog(null, "Athlete age is: " + anAthlete.GetAge()); 
       //} 
      if(button.equals(createChampButton)){ 
        Championship aChampionship = new Championship("",""); 
        aChampionship.champName = JOptionPane.showInputDialog("Enter Championship Name: "); 
        aChampionship.duration = JOptionPane.showInputDialog("Enter Championship Duration: "); 
      }  
     } 
    } 
} 

感謝提前 克里斯

+0

59是哪裏? –

+1

對於這個問題,這個問題實際上與多個按鈕或Swing無關。這似乎只是OP不瞭解變量作用域和編譯器錯誤的一種情況。我建議在嘗試使用Swing和AWT之前嘗試學習一些更基本的Java編程概念。 –

回答

2

createChampButton沒有在您的其他方法中定義,因此範圍不會讓您訪問該方法。我看到三個選項時,如何解決是:

1)使用component.getActionCommand()而是 - 你可以用你的JButton持有(類似if(evt.getSource().getActionCommand().equals("Create Championship")

2)您可以在定義的ActionListener文本進行比較的init方法:

public void init(){ 
    Container guiContainer = getContentPane(); 
    LayoutManager layout = new FlowLayout(); 
    guiContainer.setLayout(layout); 


    //Create Championship Button 
    final JButton createChampButton = new JButton("Create Championship"); 
    guiContainer.add(createChampButton); 



    //Create Club Button 
    final JButton createClubButton = new JButton ("Create Club"); 
    guiContainer.add(createClubButton); 


    //Create Athlete Button 
    final JButton createAthleteButton = new JButton ("Create Athlete"); 
    guiContainer.add(createAthleteButton); 


    //Print Athletes Button 
    final JButton printAthletesButton = new JButton ("Print all Athletes"); 
    guiContainer.add(printAthletesButton); 


    //The quiet Listener 
    ActionListener aListener = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event){ 
      JButton button = (JButton) event.getSource(); 
      //if (button.equals(printAthletesButton)){ 
       //JOptionPane.showMessageDialog(null, "Athlete name is: " +anAthlete.GetAthleteName()); 
      // JOptionPane.showMessageDialog(null, "Athlete age is: " + anAthlete.GetAge()); 
       //} 
      if(button.equals(createChampButton)){ 
        Championship aChampionship = new Championship("",""); 
        aChampionship.champName = JOptionPane.showInputDialog("Enter Championship Name: "); 
        aChampionship.duration = JOptionPane.showInputDialog("Enter Championship Duration: "); 
      }  
     } 
    }; 
    printAthletesButton.addActionListener(aListener); 
    createAthleteButton.addActionListener(aListener); 
    createClubButton.addActionListener(aListener); 
    createChampButton.addActionListener(aListener); 

} 

}

3)定義您JComponents作爲實例變量 - 聲明它們在你的初始化之外()方法(但裏面來進行分配,仍然)

Regards,
Danyel

+0

選項3:使用按鈕的類級別字段。這在Swing程序中很常見。 –

+0

是的,沒錯。那麼,我猜想,我錯過了那些顯而易見的東西。編輯我的答案。 – Danyel

+0

謝謝Danyel清除了問題!感謝Jesse的輸入,我將繼續努力朝着這個方向努力:) – ChrisK

4

createChampButton是一個局部變量init()

要在別處訪問它,您需要將其更改爲類中的字段。