0

JTextField からテキスト値を取得しようとしていますが、最初にコンポーネント オブジェクト (java.awt.Component) を JTextFiel にキャストする必要があります...

miコードはこんな感じ

Component[] x = this.getComponents(); 
    for(int i = 0; i < x.length; i++)
    {
        if (x[i] instanceof JTextComponent)
        {
               //retrieve text...something like
               //(JTextField)x[i].getText();
        }
    }

miページのすべてのコントロールが「x」(JLabelsとJTextField)にあることを知っているので、これを行っていますが、それらはコンポーネントであるため、JTextFieldにキャストしています。

私はここで本当に迷っており、これが正しい方法かどうかわかりません。御時間ありがとうございます!

4

4 に答える 4

4

私はここで本当に迷っており、これが正しい方法かどうかわかりません。御時間ありがとうございます!

すべてのコードを 1 行に書く必要はありません。したがって、問題を単純化するには、コードを単純化します。何かのようなもの:

Component component = x[i];
JTextField textField = (JTextField)component;
String text = textField.getText();

そうすれば、コンパイル エラーなどがある場合、コンパイラは正確な行を指摘します。

于 2010-10-07T20:48:36.820 に答える
2

デザインを考え直す必要があると思います。getText()を含むクラスのメソッドを公開してみませんかJTextField。そのメソッドはあなたJTextFieldのメソッドを削除し、getText()その神にひどいことを避けることができますinstanceof

于 2010-10-07T20:30:00.663 に答える
1

((JTextComponent) x[i]).getText();動作するはずです。

(x[i]が a のインスタンスであるからといってJTextComponent、必ずしもa であるとは限りませんJTextField。) しかしJTextComponent、 a がある.getText()ので、 to にキャストしても問題JTextComponentありません。

于 2010-10-07T20:27:32.087 に答える
0

リフレクション API 経由。視野が広がるためだけに=)

import java.lang.reflect.Method; 

...

  for ( Component component : this.getComponents() ) {
    try {
      Method getText = component.getClass()
        .getDeclaredMethod("getText");
      String text = (String)getText.invoke();

        //Do something with text

    } catch ( Exception exc ) {} // no such method
  }
于 2012-11-16T11:48:10.993 に答える