ジャワのJFrame:コンポーネントを再帰的に解析する方法(すなわち、JScrollPaneのを使用する場合)

StackOverflow https://stackoverflow.com/questions/368194

質問

私は自分のスイングGUIのために TableLayout を使用しています。どの私ができる、後でアクセスに必要な最初は唯一のいくつかの基本的なラベル、ボタンやテキストフィールドます:

public Component getComponent(String componentName) {
    return getComponent(componentName, this.frame.getContentPane());
}

private Component getComponent(String componentName, Component component) {
    Component found = null;

    if (component.getName() != null && component.getName().equals(componentName)) {
        found = component;
    } else {
        for (Component child : ((Container) component).getComponents()) {
            found = getComponent(componentName, child);

            if (found != null)
                break;
        }
    }
    return found;
}

残念ながら、私は私がやった、JScrollPaneにスクロールし、JTableの者をサポートするためにJTextAreaを使用して使用した後の問題に遭遇します:

JTextArea ta = new JTextArea();
ta.setName("fooburg");
JScrollPane scr = new JScrollPane(ta);
frame.getContentPane().add(scr, "1, 1");  // EDIT: changed, tkx bruno

提案した後、私は(上記のバージョンが最終もの)getComponent("fooburg")介して所望のコンポーネントにアクセスすることができました。ダンとブルーノに感謝!

役に立ちましたか?

解決

@brunoは権利である - 。あなたは、フレームのコンテンツペインにテキスト・ペインを追加する必要があります。

少しOT:あなたは、一般的に階層内のすべてのコンポーネントにアクセスしたい場合は、再帰的な何かを必要とする - あなたの現在の方法は、唯一の直接の子の名前を表示します。

void printNames(Component component) {
    System.out.println(component.getName());
    for (Component child : component.getComponents()) {
        printNames(child);
    }
}

void printFrameNamesComponents(JFrame frame) {
    printNames(frame.getContentPane());
}

(テストが、このようなものではない。)

他のヒント

あなたが代わりのJFrameのコンテンツ・ペインに子を追加する必要があります:

frame.getContentPane().add(comp);
あなただけframe.getContentPane()下のコンポーネントを列挙しているので、

あなたが上に、直接のJFrameにあなたのコードをあなたの新しいコンポーネントを追加した場合、それまでのを取得することはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top