1

私は Swing で Java を学んでいますが、使用に問題がありJTextFieldます。私のプログラムでは、JTextFieldsいくつかのテキストを動的に追加したいと考えています。

while( (ln = bufFile.readLine()) != null ) {
    // inIdPanel is JPanel
    inIdPanel.add(new JTextField(ln));
}

そして、それはうまくいきます。ただし、これらの内容はJTextFieldsユーザーが変更できるため、後ですべてから呼び出したいと考えてgetText()います。これは可能ですか?これどうやってするの?

私はこの質問を見ました: Java Swing: JButton は新しい JTextField(s) を作成しますが、これは私の問題を解決するのに十分ではありません (私の場合、配列を使用することは良い考えではないと思いますが、間違っているかもしれません)。

4

2 に答える 2

2

簡単な解決策として、ArrayList<JTextField> textFieldList投稿したコードに を追加して追加するだけです。

while((ln = bufFile.readLine()) != null) {
    textFieldList.add(new JTextField(ln));
    inIdPanel.add(textFieldList.get(textFieldList.size()-1));
}

次に、テキストフィールドにアクセスしたいときは、単にそれらを繰り返します。

for (JTextField jtf : textFieldList) {
    /* Operate on jtf, call methods, etc */
}

追加できるテキスト フィールドの数に定義された制限がある場合は、 を配列に置き換えることができArrayListますが、その数が不明な場合はリストが便利です。

于 2012-06-18T02:50:43.787 に答える
2

呼び出すことができない理由は、作成時にgetText()への参照を保存していないためです。後でメソッドを呼び出すことができるように、配列またはコレクションを使用して s を作成するときに sを格納JTextFieldする必要があります。Aは何行読み込むかわからないので、Aよりも簡単です。JtextFieldcollectionarray

List<JTextField> fields = new ArrayList<JTTextField>();
while( (ln = bufFile.readLine()) != null ) {
    JTextField field = new JTextField(ln);
    inIdPanel.add(field);
    fields.add(field);
}

.getText()次に、それらすべてから呼び出すことができます

for(JTextField field: fields){
    System.out.println(field.getText());
}
于 2012-06-18T02:51:54.527 に答える