我的應用程序的結構大致與此MainApplication-> SuperFXMLController-> ChildFXMLController類似。每個ChildFXML都有一個按鈕來在SuperFXML中向GridPane添加一個更多的子元素我已經在ChildFXMLController中定義了buttonHandler方法,但是操作本身應該發生在SuperFXMLController(在網格中添加新行)中。問題是如何處理來自SuperFXMLController的操作?嵌入FXML中的訪問操作
這裏一些代碼的細節: AddLogRecordController.java(所謂的 「SuperFXMLController」):
@FXML
private void initialize() throws IOException {
rowIndex = 0;
FXMLLoader loader = new FXMLLoader(getClass().getResource("RecordGrid.fxml"));
mainGrid.add(loader.load(), 0, rowIndex++);
RecordGridController controller = (RecordGridController) loader.getController();
controller.setSuperController(this);
}
...
public void addRowHandle() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("RecordGrid.fxml"));
mainGrid.getChildren().add(loader.load());
RecordGridController controller = loader.getController();
} catch (IOException e) {
e.printStackTrace();
}
}
「RecordGridController」 稱爲 「ChildFXMLController」:
private AddLogRecordController superController;
...
public void setSuperController(AddLogRecordController addLogRecordControllerClass) {
this.superController = addLogRecordControllerClass;
}
...
@FXML
private void addRowHandler() {
superController.addRowHandle();
}
這是結果窗口,在其中被紅色包圍的部分是小孩fxml,應按照按鈕添加到QSO按下的次數複製:
使用MVC方法:與子控制器共享數據模型,並觀察父控制器中的數據模型。然後,只需在子控制器的按鈕處理程序中將數據添加到模型中即可。 –
你能解釋一下怎麼做嗎?我是newbuy – brack11
實現的細節將很大程度上取決於您的不同FXML文件和控制器之間的關係。如果你想要一個更具體的答案,你需要在問題中更具體。創建一個示例應用程序 - [MCVE] - 演示您正在嘗試執行的操作,並將其包含在您的問題中。 –