ジャワのJFrame:コンポーネントを再帰的に解析する方法(すなわち、JScrollPaneのを使用する場合)
-
21-08-2019 - |
質問
私は自分のスイング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にあなたのコードをあなたの新しいコンポーネントを追加した場合、それまでのを取得することはありません。
所属していません StackOverflow