당신이 TextField
의를 수정하려는 경우, 당신은 그 필드의 값을 검색 (그리고 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();
}
No :'Field'는'TextField'가 아니며 결코 될 수 없습니다. (그것은'TextField' 타입 일 수 있지만, 같은 것을 의미하지는 않습니다.) 실제로 무엇을하려고합니까? –
Field가 TextField가 아니라는 것을 알고 있습니다. 어떤 속성을 수정하기 위해 모든 TextField를 얻으려고합니다. 그래서 Reflection이 클래스에 선언 된 모든 TextField를 얻으려고합니다. – R3ing
이미 알고 있다면,'Field'를'TextField'로 캐스팅하려고하는 코드를 왜 게시하고 있습니까? 당신은'ClassCastException'을 던질 것을 보장합니다. 왜 여기서 반사를 사용합니까? 왜 컨트롤러의 각 텍스트 필드에서 메서드를 호출하지 않습니까? 실제 문제가 무엇인지 설명하기 위해 질문을 편집해야합니다. –