1
UI 화면에 여러 개의 TextField가 있고 선택한 텍스트 필드의 내용을 가져오고 싶습니다. JavaFX를 사용하고 isFocused() 메소드가 작동하지 않습니다.JavaFX에서 선택된 텍스트 필드의 내용 가져 오기
UI 화면에 여러 개의 TextField가 있고 선택한 텍스트 필드의 내용을 가져오고 싶습니다. JavaFX를 사용하고 isFocused() 메소드가 작동하지 않습니다.JavaFX에서 선택된 텍스트 필드의 내용 가져 오기
EventHandler
이 실행되기 전에 초점이 Button
으로 이동합니다. 즉 EventHandler
이 속성을 확인할 때 TextField
이 더 이상 초점을 맞추지 않는다는 의미입니다.
당신은 비록 Scene
의 focusOwner
재산을 듣고 마지막 Node
집중 절약 할 수있다 : 당신이 fxml를 사용하는 경우
private static class FocusData {
private TextField textField = null;
public TextField getTextField() {
return textField;
}
public void setFocusedNode(Node node) {
this.textField = node instanceof TextField ? (TextField) node : null;
}
public boolean isTextField() {
return textField != null;
}
}
@Override
public void start(Stage primaryStage) {
final FocusData focusData = new FocusData();
Button btn = new Button("Print Text");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (focusData.isTextField()) {
System.out.println(focusData.getTextField().getText());
}
}
});
VBox root = new VBox();
for (int i = 0; i < 5; i++) {
root.getChildren().add(new TextField());
}
Scene scene = new Scene(root);
scene.focusOwnerProperty().addListener(new ChangeListener<Node>() {
@Override
public void changed(ObservableValue<? extends Node> observable, Node oldValue, Node newValue) {
focusData.setFocusedNode(oldValue);
}
});
root.getChildren().add(btn);
primaryStage.setScene(scene);
primaryStage.show();
}
당신의 scene
속성에 리스너를 추가하여 장면에 액세스 할 수 있습니다 일부 노드에서 initialize
메서드를 사용하고 해당 수신기에서 수신기를 추가/제거합니다.
final ChangeListener<Node> listener = new ChangeListener<Node>() {
@Override
public void changed(ObservableValue<? extends Node> observable, Node oldValue, Node newValue) {
focusData.setFocusedNode(oldValue);
}
};
if (root.getScene() != null) {
root.getScene().focusOwnerProperty().addListener(listener);
}
root.sceneProperty().addListener(new ChangeListener<Scene>() {
public void changed(ObservableValue<? extends Scene> observable, Scene oldValue, Scene newValue) {
if (oldValue != null) {
oldValue.focusOwnerProperty().removeListener(listener);
}
if (newValue != null) {
newValue.focusOwnerProperty().addListener(listener);
}
listener.changed(null, null, null);
}
});
:
root