2010-04-26 33 views
1

我正在用SWING實現GUI開發Java桌面應用程序。Java Swing - 如何從其他JPanel訪問一個JPanel的JComponent,它們都被添加到JFrame中?

我有一個JFrame。我已經添加了三個JPanel。一個JPanel panel1有一個開始按鈕。現在我想在用戶按下面板1上的開始按鈕時禁用其他JPanel上的各種組件。

現在,我如何從panel1訪問其他面板的組件。

我知道,一個辦法是先獲得PANEL1

panel1.getParent(); 

的容器然後得到容器

container.getComponents(); 

的組成部分,並以此作爲每個需要。

Q1。有什麼其他方式可以執行相同的任務嗎? (我認爲這是唯一的方法)

Q2。獲取容器的組件列表後,如何區分一個容器與其他容器?

回答

1

您可以引用該面板的實例變量當你創建它們,並使用這些變量引用面板。

public class myFrame extends JFrame { 
    public static JPanel buttonPanel; 
    public static JPanel statusPanel; 

    public static void main(String[] args) { 
     buttonPanel = new JPanel(); 
    } 
} 
0

我會通過啓動按鈕將其他面板的引用傳遞到面板中。或者簡單地在容器中有一個方法,它可以完全按照你想要的來調用它。

1

我可能有一個單獨的應用程序層 - 一個持有對各種面板和開始按鈕的引用 - 處理此操作。所以,當單擊開始按鈕時,它會調用某種Controller對象的方法; Controller對象引用了其他JPanel,將禁用其他組件。

1

我要補充來自外部的ActionListener啓動按鈕:

StartPanel panel1 = ... 
JPanel panel2 = .... 

panel1.getStartButton().addActionListener(new ActionListener() {  
    public void actionPerformed(ActionEvent e) { 
    setEnabledTree(panel2, false); 
    } 
}