2013-10-13 85 views
2

嗨,我基本上有兩個類, 一個主要和一個只是爲了分隔面板,只是爲了代碼可讀性。Java Swing:從另一個類訪問面板組件

我有:

public class Main{ 

    public static void main (String args[]) { 
    JFrame mainJFrame; 
    mainJFrame = new JFrame(); 

    //some other code here 

    CenterPanel centerPanel = new CenterPanel(); 
    centerPanel.renderPanel(); 
    mainFrame.add(centerPanel.getGUI()); 

    } 


} 

class CenterPanel{ 
    JPanel center = new JPanel(); 

    public void renderPanel(){ 
     JButton enterButton = new JButton("enter"); 
     JButton exitButton = new JButton("exit"); 
     center.add(exitButton); 
     center.add(enterButton); 
    } 

    public JComponent getGUI(){ 
     return center; 
    } 
} 

上面的代碼工作完美。它呈現包含按鈕的centerPanel進入和退出。我的問題是:

我仍然需要操縱按鈕爲主,像改變顏色,添加一些動作偵聽器和喜歡。但我無法訪問它們因爲從技術上說它們來自不同的類,因此在主,centerPanel是另一個對象。

我該如何訪問按鈕並使用它(sets,actionlisteners等)?即使他們來自另一個班級,我仍然希望在主要內部使用它嗎?非常感謝!

回答

3

使CenterPanel

class CenterPanel{ 
    JPanel center = new JPanel(); 

    JButton enterButton; 
    JButton exitButton; 

    public void renderPanel(){ 
     enterButton = new JButton("enter"); 
     exitButton = new JButton("exit"); 
     center.add(exitButton); 
     center.add(enterButton); 
    } 

    public JButton getEnterButton() 
    { 
     return enterButton; 
    } 

    public JButton getExitButton() 
    { 
     return exitButton; 
    } 

    public JComponent getGUI(){ 
     return center; 
    } 
} 
+0

哦,對了,呵呵謝謝..我在想一個完全不同的東西感謝你 – muffin

1

您的主要方法參考centerPanel按鈕成員。在您調用centerPanel.renderPanel(); 後,按鈕將被添加到CenterPanel實例中的JPanel類型的「中心」參考中。您可以通過在main方法中調用centerPanel.getGUI();來獲取「中心」的引用。這將返回類型JComponentcenter引用。 JComponent是一個awt container.so,你可以撥打center.getComponents()。這將返回JPanel中存在的數組中的所有組件。即中心參考。你可以迭代它們,獲得它們的類型並做你想做的任何事情。