2012-09-14 148 views
2

我有一個Java Swing的GUI,像這樣的結構訪問的Swing組件:
的JFrame
- JPANEL1
-----的jButton1
----- jLabel1的
從另一個類

我的目標是,當jButton1被按下時,我想改變jLabel1的顏色或設置一些文本到它上面,但是這應該在外部類中完成(我們稱之爲externalClass)。

所以在GUI類的構造函數我本身傳遞給我的外部類:

public class GUIclass extends javax.swing.JFrame { 
    private externalClass e; 
    public GUIclass() { 
     initComponents(); 
     e = new externalClass(GUIclass.this); 
} 

在我的外部類,我不能夠訪問例如標籤:

private GUIclass g; 
public externalClass(GUIclass g) { 
    this.g = g; 
    System.out.println(g.getComponentCount()); 
     // --> only 1, is this the JFrame (?) 
    System.out.println(g.getComponent(0).getName()); 
     // always "null" 
} 

有沒有人請向我解釋我如何獲得標籤? 另外我很擔心爲什麼組件的名稱總是「空」。

在此先感謝!

回答

3

您在JPanel中創建了JLabel全局實例,併爲JLabel在JPanel中提供了一個getter。

您通過構造函數將JPanel的實例傳遞給外部類。

您的外部類中的某處使用JPanel實例來獲取JLabel實例。

JLabel label = panel.getJLabel(); 
+0

謝謝,這對我有用! – BNetz

3

只有一個直接附接至JFrameJRootPane組件。

ExternalClass訪問的JLabel,你可以從框架的內容窗格中獲取組件:

JPanel panel = (JPanel) g.getContentPane().getComponent(0); 
JLabel label = (JLabel) panel.getComponent(1); 

而且

g.getComponent(0).getName() 

將默認返回null因爲這是名集到JRootPane。請參閱How to Use Root Panes

+0

謝謝Reimeus,這對我來說是一個很有價值的信息! – BNetz