我在問這個問題之前在任何地方尋找解決方案,如果它已經存在請報告它。JavaFX,在標籤之間傳遞參數控制器
在實踐中我有這種情況:
TabLayout.fxml
<JFXTabPane fx:id="tabbedPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefWidth="500.0" tabClosingPolicy="UNAVAILABLE" tabMinWidth="100.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.TAB.TabController" stylesheets="@tab.css">
<tabs>
<Tab id="anagrafeTab" closable="false" text="Anagrafe">
<content>
<fx:include fx:id="anagrafeL" source="/application/Anagrafe/AnagrafeLayout.fxml"/>
</content>
</Tab>
<Tab id="visiteTab" closable="false" text="Visite">
<content>
<fx:include fx:id="visiteL" source="/application/Visite/VisiteLayout.fxml"/>
</content></Tab>
<Tab id="latteTab" closable="false" text="Produzione Latte">
<content>
<fx:include fx:id="latteL" source="/application/Latte/LatteLayout.fxml"/>
</content>
</Tab>
<Tab id="partiTab" closable="false" text="Parti" >
<content>
<fx:include fx:id="partiL" source="/application/Parti/PartiLayout.fxml"/>
</content>
</Tab>
</tabs>
</JFXTabPane>
用於每一個 「包括」 佈局:
AnagrafeLayout.fxml
VisiteLayout.fxml
LatteLayout.fxml
PartiLayout.fxml
比我有一個模型,併爲每一個佈局的控制,但一個唯一調用。
public class Tab {
public Tab() {
inizializza();
}
private void inizializza() {
try {
Stage stage = new Stage();
stage.setTitle("Dati");
stage.getIcons().add(new Image(getClass().getResourceAsStream("insert.png")));
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("TabLayout.fxml"));
JFXTabPane root = (JFXTabPane) loader.load();
Scene scene = new Scene(root,660,430);
stage.setScene(scene);
stage.show();
//ScenicView.show(scene);
} catch(Exception e) {
e.printStackTrace();
}
}
}
我需要將ObservableList<Visite> data = FXCollections.observableArrayList();
傳遞給每個控制器。
我真的不知道該怎麼做,我不會使用單個控制器,因爲他們是相當長的類。
編輯:
TABController.java
public class TabController implements Initializable {
@FXML
private TabPane tabbedPane;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert tabbedPane != null : "fx:tabbedPane=\"in\" was not injected: check your FXML file 'TabLayout.fxml'.";
tabbedPane.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> {
if(tabbedPane.getSelectionModel().getSelectedIndex() != 0) {
tabbedPane.getScene().getWindow().setWidth(1171);
tabbedPane.getScene().getWindow().setHeight(700);
} else {
tabbedPane.getScene().getWindow().sizeToScene();
}
});
}
}
EDIT2
的4個選項卡有,如上面提到的,每一個他自己的模型類。 所以我有4個不同的列表,它們最初是空的,因爲它們是動態填充的,因爲每個選項卡都有一個表。 當tabPane由不同的實習調用時,將創建列表。 我需要這些列表,因爲它可能是以前的負載的可能性,我必須將這些信息傳遞給控制器。
在實踐中,這種情況發生:
1)
呼叫創建從該選項卡中加載表格空列表功能插件。這些數據將在最後存儲在數據庫中。
2)
調用功能顯示調用該函數插入件與創建列表和從數據庫中獲取數據並將其發送到隨後可以修改表的特定標誌。
我希望我是清楚的,我很抱歉,對於這個問題的不確定性先
現在我解決這樣
public class TabController implements Initializable {
@FXML
private TabPane tabbedPane;
@FXML
private VisiteController visiteLController;
private ObservableList<Visite> dataVisite = FXCollections.observableArrayList();
private ObservableList<Visite> dataDelVisite = FXCollections.observableArrayList();
@FXML
private LatteController latteLController;
private ObservableList<Latte> dataLatte = FXCollections.observableArrayList();
private ObservableList<Latte> dataDelLatte = FXCollections.observableArrayList();
@FXML
private PartiController partiLController;
private ObservableList<Parti> dataParti = FXCollections.observableArrayList();
private ObservableList<Parti> dataDelParti = FXCollections.observableArrayList();
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert tabbedPane != null : "fx:tabbedPane=\"in\" was not injected: check your FXML file 'TabLayout.fxml'.";
tabbedPane.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> {
if(tabbedPane.getSelectionModel().getSelectedIndex() != 0) {
tabbedPane.getScene().getWindow().setWidth(1171);
tabbedPane.getScene().getWindow().setHeight(700);
} else {
tabbedPane.getScene().getWindow().sizeToScene();
}
});
visiteLController.setData(dataVisite, dataDelVisite);
latteLController.setData(dataLatte, dataDelLatte);
partiLController.setData(dataParti, dataDelParti);
}
}
和設置方法爲每個控制器
明顯變化public void setData(ObservableList<Visite> data, ObservableList<Visite> dataDel) {
this.data = data;
this.dataDel = dataDel;
liveSearh();
}
你可以發佈'TabController'的代碼嗎?這看起來像http://stackoverflow.com/questions/37068243/share-model-with-nested-controller –
增加:) 現在我回頭看看鏈接 –
請澄清問題。每個控制器都需要什麼,以及您在哪裏創建每個需要的數據,或者有權訪問這些數據? –