私はJPanelのを拡張するクラスのすべてのパブリックフィールドにアクセスしようとしていますので、私はそれらをリセットすることができますが、私はJCheckBox
にフィールドをキャストすることはできませんスイングするフィールドをキャスト、JTextArea
などJavaリフレクション - 入力
は、ここに私です私はちょうど入力 'サブ' メソッドにアクセスする必要があり
public void clearPage(JPanel page) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException
{
//Basic class using Swing elements (JtextFields, JCheckBoxes etc.)
Field[] inputs = page.getClass().getFields(); //Works, I get all Fields
for (int i = 0;i<inputs.length;i++)
{
if (inputs[i].getType().getName().equals("javax.swing.JCheckBox"))//Works
{
JCheckBox demo = (JCheckBox) inputs[i]; //(Cannot cast from Field to JCheckBox)
//Second Try
//JCheckBox str = (JCheckBox) Class.forName("javax.swing.JCheckBox").cast(inputs[i]);
//str.setSelected(false);
//Cannot cast java.lang.reflect.Field to javax.swing.JCheckBox
}
}
}
を試みる:
.SetText
.setSelected
など
私は、このメソッドを使用して必要なメソッドを取得しようとしてきた:
Method d = inputs[i].getClass().getDeclaredMethod("setSelected", boolean.class);
inputs[i].getType().getClass().getMethod("setSelected", boolean.class);
しかし、彼らの両方が私にその名前のメソッドが自分ではないというエラーを与えています。
これはリフレクションをよく使うようには見えず、オブジェクトをどのように記述したかによってデザイン上の問題があることを示しています。 (フィールドが多すぎますか?)おそらく配列などを使用するべきでしょう。リフレクションは、デバッグやシリアライゼーションなどの汎用APIを記述するためのものです。 https://docs.oracle.com/javase/tutorial/reflect/およびhttps://meta.stackexchange.com/q/66377/244864も参照してください。私が作っているプログラムは、第2ラインチームにエスカレーションテンプレートを生成することができるようにGUIフィールドを大量に必要とする最初の行の技術サポート部門のためであるので、リンク用の – Radiodef
おかげで、非常に多く存在している理由があります。 XYリンクを見てみましょう。質問を投稿するのに便利です。 – Martin
それで、私の提案は配列のようなものを使うことです。 GUIフィールドがたくさんある場合、正しいと思われるアプローチは、 'クラスウィジェット{}'と 'List'を持つことです( 'ウィジェット 'は共通を表すタイプです)すべての分野の要因その他の役立つリンク:https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)、https://www.youtube.com/watch?v=8bZh5LMaSmE、https://www.youtube.com/ watch?v = v-2yFMzxqwUは、優れたオブジェクト指向プログラム設計の多くの面を示す2つのビデオです。 –
Radiodef