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);
}
});