2012-05-07 10 views
0

JButtonを含むプログラムを作成しています。ボタンをクリックするたびにJPanelに新しいJTextFieldが追加されます。動的に生成されるGUI JTextFieldオブジェクトへのアクセス

私の問題は、ユーザーがすべてJTextFieldsを作成して情報を入力した後、各フィールドのテキストを取得する必要があるということです。 JTextFieldsは、インスタンス名を持たないため、動的に生成されたときにどうすればアクセスできますか?インスタンス名を知らなくても、それぞれのテキストを取得するより良い方法がありますか?ここで

はあなたがそれぞれのフィールドからテキストを取得したいと言うJButton ...

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {           
    JTextField x = new JTextField(); 
    x.setColumns(12); 
    p.add(x); 
    validate(); 
} 
+2

フルコードを入力してください。つまり、 'p'は何か? – Romain

+0

pは、テキストフィールドを置いたパネルです。 –

答えて

9

actionPerformedイベントのコードです。したがって、新しいインスタンスxを作成すると、JTextFieldsArrayListに追加するなど、それらのコレクションを保存しないのはなぜですか?

また、pJPanelであると仮定すると、追加するJTextFieldsであるすべての子を取得できるはずです。あなたはパネルのコンポーネントをループ(またはものは何でも「P」である)ことにより、それらすべてを見つけることができますので...

Component[] children = p.getComponents(); 
for (int i=0;i<children.length;i++){ 
    if (children[i] instanceof JTextField){ 
     String text = ((JTextField)children[i]).getText(): 
    } 
} 
+1

ブリリアント - これを行う最善の方法は、新しく作成されたオブジェクトのコレクションを保持することです。そうすれば、簡単に参照できます。 – Ewald

+0

ありがとうございました! :) –

+1

問題はありません、喜んで助けてください。あなたが答えに満足しているなら、それを受け入れられた答えとして「刻む」ことを覚えておいてください。 – wattostudios

0

ようgetComponents()を使用してみてください。必要に応じて、それぞれがテキストボックスであるかどうかを確認します。つまり、p.getComponentsを実行し、返された配列をループします。同様に:

Component[] components=p.getComponents(); 
for (Component c : components) 
{ 
    if (c instanceof JTextField) 
    { 
    String value=((JTextField)c).getText(); 
    ... do whatever ... 
    } 
} 

彼らは交換している場合、それはあなたが必要とするすべてである必要があります。それらを区別する必要がある場合は、JTextFieldを拡張する独自のクラスを作成することが最もきれいだと思います。名前やシーケンス番号などのフィールドが必要です。

関連する問題