あなたがTextField
Sを変更したい場合は、それらのフィールドから値を取得(およびTextField
に、この値をキャスト)する必要があります。
次の例では、アプローチを実証する必要があります
private TextField t1 = new TextField();
private TextField t2 = new TextField();
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
Object object = this;
Class clazz = object.getClass();
for (Field field : clazz.getDeclaredFields()) {
if (field.getType().getName().equals("javafx.scene.control.TextField")) {
try {
// get field value here
TextField textField = (TextField) field.get(object);
if (textField != null) {
textField.setText("Hello World");
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
Logger.getLogger(ReflectTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
VBox root = new VBox();
root.getChildren().addAll(btn, t1, t2);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
いいえ: 'Field'は' TextField'ではありません。 (これは 'TextField'型でも構いませんが、それは同じことを意味するものではありません)あなたは実際何をしようとしていますか? –
私はFieldがTextFieldではないことを知っています。私はいくつかのプロパティを変更するためにフォームのTextFieldをすべて取得しようとしているので、Reflectionでクラス内で宣言されたすべてのTextFieldを取得しようとしています。 – R3ing
あなたがすでにそれを知っているなら、なぜ 'Field'を' TextField'にキャストしようとしているのですか?あなたは 'ClassCastException'をスローすることが保証されています。なぜここで反射を使うのですか?なぜコントローラ内の各テキストフィールドで通常の方法でメソッドを呼び出さないのですか?あなたは実際の問題が何であるかを説明するためにあなたの質問を編集する必要があります。 –