2011-09-14 7 views
0

私は動的のJTextFieldを作成していて、そこループへの道がそれぞれ1を介していた、それはこのような何か値Javaで動的に作成されたコンポーネントをループする方法はありますか?

だためにチェックすると、私は思っていた:

foreach(JTextField:jtf in JFrame) 
    System.out.prinlnt(jtf.getText()); 

編集:

現在の方法私はcreateDynamicを呼び出すとき

private ArrayList<JTextField> txtFields = new ArrayList<JTextField>(); 

:私は、これは、配列のリストを作成してやってる

final JTextField txtDirPath = new JTextField(20); 
txtFields.add(txtDirPath); 

その後、私のボタンの上に、私はこれを実行するアクションがあります。

for (int i = 0; i < txtFields.size(); i++) { 
    String strPath = txtFields.get(i).getText(); 
    System.out.println(txtFields.size()); 
    System.out.println(strPath); 
} 

答えて

1

を動的に作成するときだけ(java.util.List<JTextField>)リストで、あなたのテキストフィールドを配置し、このリストをループ:

for (JTextField jtf : theListOfTextFields) { 
    System.out.prinln(jtf.getText()); 
} 
+0

私はこれを試してみたが、リストには、私はいくつかのコードを投稿してみましょう、私に正しい出力を与えていません。 –

+0

さて、私はいくつかの成功を収めました。ちょうど今度は出力を1回ではなく2回印刷します。しかし、それは正しい情報を得ています。 –

+0

素晴らしい、私のロジックで動作するようになった。ありがとう。 –

0

@JB Nizetが提案するリストにthosを格納したくない場合は、Container#getComponentsを呼び出してすべての子コンポーネントの配列を取得できます。そして、それがそれぞれJTextFieldであるかどうかを確認してください。

Component[] compArr = myFrame.getComponents(); 
for (Component comp : compArr) { 
    if (comp instanceof JTextField) { 
     System.out.prinlnt(((JTextField)comp).getText()); 
    } 
} 
1
for (Component c : jframe.getComponents()) { 
    if (c instanceof JTextField) 
     System.out.println(((JTextField)c).getText()); 
} 
+0

これは、JFrameの直接の子のみを返します。 JTextFieldは、通常、JFrameのコンテンツペインまたはコンテンツペインのサブパネルに配置されます。 –

+0

@JB Nizet you'r rightしかし、再帰を追加するにはロケット科学ではありません:-)真剣に、私はどこかでリストを保持することよりも動的ルックアップを好んでいます - 無意味な味のマット – kleopatra

0
for(Component c : myJFrame.getComponents){ 
    if (c instanceof JTextField){ 
     // do work here 
    } 
} 
+0

これはJFrameの直接の子のみを返します。 JTextFieldは、通常、JFrameのコンテンツペインまたはコンテンツペインのサブパネルに配置されます。 –

関連する問題