2

次のような構造の Java-Swing-GUI を取得しました:
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"
}

レーベルにアクセスする方法を誰か説明してくれませんか? また、コンポーネントの名前が常に「null」である理由も気になります。

前もって感謝します!

4

2 に答える 2

3

JPanel で JLabel のインスタンスをグローバルにし、JPanel で JLabel のゲッターを提供します。

コンストラクターを介して JPanel のインスタンスを外部クラスに渡します。

外部クラスのどこかで、JPanel インスタンスを使用して JLabel インスタンスを取得します。

JLabel label = panel.getJLabel();
于 2012-09-14T13:52:03.467 に答える
3

に直接接続されているコンポーネントは 1 つだけJFrameですJRootPane

JLabelfromにアクセスするにはExternalClass、フレームのコンテンツ ペインからコンポーネントを取得できます。

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

また

g.getComponent(0).getName()

nullこれは に設定された名前であるため、デフォルトでが返されますJRootPane

詳細については、ルート ペインの使用方法を参照してください。

于 2012-09-14T14:28:49.200 に答える