您需要對該對話框的控制器的引用。爲此,請創建FXMLLoader
的實例,而不是使用靜態FXMLLoader.load(URL)
方法。
例如,假設你有一個類DialogController
,所以你Dialog.fxml
樣子:
<AnchorPane xmlns:fx="..." fx:controller="DialogController.fxml">
...
</AnchorPane>
然後你就可以在delBox()
法
Stage dialogStage = new Stage();
FXMLLoader loader = new FXMLLoader(getClass().getResource("Dialog.fxml"));
AnchorPane root = (AnchorPane)loader.load();
DialogController controller = (DialogController) loader.getController();
Scene scene = new Scene(root);
dialogStage.setScene(scene);
dialogStage.showAndWait();
訪問DialogController
上面現在你可以兩個控制器之間進行通信。例如,在DialogController
可以定義一個message
財產,並將其綁定到一個Label
:在您的delBox
public class DialogController {
private final StringProperty message = new SimpleStringProperty("");
public void setMessage(String message) {
this.message.set(message);
}
public String getMessage() {
return message.get();
}
public StringProperty messageProperty() {
return message ;
}
@FXML
private Label label ;
public void initialize() {
label.textProperty().bind(message);
// ...
}
}
然後回()方法:
//... as before:
AnchorPane root = (AnchorPane)loader.load();
DialogController controller = (DialogController) loader.getController();
controller.setMessage("Hello World");
// ...
同樣,您可以定義特性,這在對話框中按下控件時設置,並且觀察它們或在showAndWait()調用之後查詢它們。
還有一堆其他類似的技術。一些例子:
https://github.com/james-d/Shared-Data-Controller/tree/master/src
https://github.com/james-d/Dialog-FXML-Example/tree/master/src
https://github.com/james-d/Nested-Controller-Example/tree/master/src/nestedcontrollerexample
非常感謝! –