0

を含むプログラムを書いていますJButton。ボタンがクリックされるたびに、新しいJTextFieldがに追加されJPanelます。

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

actionPerformedこれがイベントのコードですJButton...

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

2 に答える 2

9

各フィールドからテキストを取得したいとします。したがって、新しいインスタンスを作成するときは、にを追加するxなど、それらのコレクションを保持してみませんか?JTextFieldsArrayList

pまたは、それがであると仮定するとJPanel、すべての子を取得できるはずです。これJTextFieldsは、追加する子になります。getComponents()そのように使ってみてください...

Component[] children = p.getComponents();
for (int i=0;i<children.length;i++){
    if (children[i] instanceof JTextField){
        String text = ((JTextField)children[i]).getText():
    }
}
于 2012-05-07T13:19:21.163 に答える
0

パネルのコンポーネント(または「p」が何であれ)をループすることで、それらすべてを見つけることができます。必要に応じて、それぞれがテキストボックスであるかどうかを確認します。つまり、p.getComponentsを実行してから、返された配列をループします。好き:

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

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

于 2012-05-07T13:30:06.080 に答える