2013-01-11 49 views
1

我是相對較新的使用javax.swing和java.awt如此忍受,如果我笨拙地表達我的問題。澄清在達到組件,Java Swing

比方說,我有一個自定義類CustomClass,它擴展並創建一個JPanel p。在班級中,我添加一個JButton bp。後來在另一個程序文件中,我創建了一個名爲cp的CustomClass實例,並希望能夠使用「actionPerformed」方法捕獲來自b的單擊事件。我的問題是如何「達到」(如書面路徑)JButton b從實例cp? (假設所有相關的類文件已經關聯)

+0

不要擴展面板。只是使用一個實例。 –

回答

4

如果我理解正確,請使用getters和setter。 I,E您customPanel將有publicgetButton()方法,該方法將返回JButton實例:

class CustomPanel extends JPanel { 
    JButton button=new JButton("Some button"); 

    public JButton getMyButton() { 
     return button; 
    } 
} 

class Test { 
    CustomPanel cp=new CustomPanel(); 


    void someMethod() { 
     JButton b= cp.getMyButton(); 
    } 
} 

UPDATE

按照評論:

如果我有像10或20我的JPanel中的不同組件是 有一些方法可以實現它們而不必製作很多方法

JPanel例如直接讓getComponentCount,比重複使用for loopgetComponentAt(int i)這將使你得到JPanel訪問所有組件:

CustomPanel cp=...;//this class extends jpanel 


for(int i=0;i<cp.getComponentCount();i++) { 
    Component c=cp.getComponentAt(i); 
    if(c instanceof JButton) { 
     //do something 
    } 
} 

更新2

什麼如果我有兩個或多個對象應該屬於同一個類 ,但作爲單獨的對象處理,我如何區分它們使用你已經爲我提供了

看看setName(String name)JButtongetName這將允許您指定的實例,它可以通過getName()可以得到一個唯一的名稱循環。或者,使用setActionCommand(String name)getActionCommand()來區分按鈕與另一個我更喜歡後者。 或者你甚至可以使用他們的文本,通過getText()

+0

謝謝你的回答!這是針對所述問題的有效解決方案,但是我認爲是這樣的:如果我在JPanel中有10或20個不同組件,有什麼方法可以實現它們而不必製作很多方法? –

+0

按鈕只是一個例子,有一些組件,不需要爲它創建一個新類。 –

+0

@ user1967984是的,我看到我像我的***一樣閱讀。抱歉。根據您之前的評論,請參閱更新後的文章 –