4

オプションのパネルをコーディングしています。アプリケーションの開発中にオプションをより速く追加できるようにするために、すべての入力のコンポーネントをフレームに入れることにしました。構成からそれらの値をロードし、対応する値を設定する必要があります。テキストですが、フィールドからコンポーネントのテキストを取得できないようです。スレッド「AWT-EventQueue-0」の例外が
発生しますjava.lang.RuntimeException:コンパイルできないソースコード-誤ったsymタイプ:java.awt.Component.setText
Nombre:サーバーClase:class javax.swing.JTextField

private void loadConfigs() {
    List<Component>  compList = getAllComponents(this);
    System.out.println("Tamaño "+compList.size());
    for(int i=0; i<compList.size();i++) {
       if(compList.get(i).getName() != null) {
           System.out.println("Nombre: "+compList.get(i).getName() +" Clase:"+ compList.get(i).getClass().toString());
           if(compList.get(i).getClass().toString().matches("class javax.swing.JTextField")) {
               System.out.println("Machea load " +compList.get(i).getName() + compList.get(i).toString());
               compList.get(i).setText(rootFrame.config.get(compList.get(i).getName()));
           }
           else if(compList.get(i).getClass().toString().matches("class javax.swing.JCheckBox")) {
                if (rootFrame.config.get(compList.get(i).getName()) == null) {
                    compList.get(i).setSelected(false);
                }
                else {
                    compList.get(i).setSelected(true);
                }
           }
       }
    }
}
public static List<Component> getAllComponents(final Container c) {
    Component[] comps = c.getComponents();
    List<Component> compList = new ArrayList<Component>();
    for (Component comp : comps) {
        compList.add(comp);
        if (comp instanceof Container) {
            compList.addAll(getAllComponents((Container) comp));
        }
    }
    return compList;
}
4

2 に答える 2

12

ここ:

compList.get(i).setText(....)

コンパイラcompList.get(i)はコンポーネントとしてのみ認識します。JTextFieldメソッドを使用するには、最初にこれをJTextFieldとしてキャストする必要があります。

((JTextField)compList.get(i)).setText(....)

ここでのあなたの計画は、私には不器用で、OOPに非常に準拠していないようです。

おそらく、を作成しMap<String, JTextField>、クラスにパブリックメソッドを与えて、JTextFieldが表すものを表すStringに関連付けられたテキストフィールドによって保持される文字列を取得する必要があります。

于 2012-04-29T16:42:40.743 に答える
7

次のようなものを使用する必要があります。

if(compList.get(i) instanceof JTextField) {
    JTextField field = (JTextField) compList.get(i);
    field.getText(); // etc
}

getClass().toStringあなたが行ってきたチェックの代わりに。

于 2012-04-29T16:44:26.427 に答える