1
我在我的UI屏幕上点击了一个按钮并获得了所选textfield的内容。我正在使用JavaFX和isFocused()方法不起作用在JavaFX中获取所选文本字段的内容
我在我的UI屏幕上点击了一个按钮并获得了所选textfield的内容。我正在使用JavaFX和isFocused()方法不起作用在JavaFX中获取所选文本字段的内容
在EventHandler
运行之前,重点转移到Button
。这意味着TextField
不再专注于EventHandler
检查属性。
你可以听Scene
不过的focusOwner
财产和保存最后Node
重点:
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();
}
如果您使用的是FXML您可以通过添加一个监听到的scene
属性可以访问到现场initialize
方法中的某个节点,并添加/删除该侦听器中的侦听器。
root
是在下面的代码片断一些节点:
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);
}
});