在问这个问题之前,我在任何地方寻找解决方案,如果它已经存在请报告。
在实践中我有这种情况:
TabLayout.fxml
每个“包含”的布局:
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 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)
调用函数insert,创建从选项卡中的表加载的空列表。 然后将数据存储在数据库中。
2)
调用函数显示调用函数insert,其中包含一个特定的标志,该标志创建列表并从数据库中获取数据并将它们发送到可以修改的表中。
我希望我很清楚,我为之前的问题含糊不清道歉
现在我正以这种方式解决
public class TabController implements Initializable {
@FXML
private TabPane tabbedPane;
@FXML
private VisiteController visiteLController;
private ObservableList dataVisite = FXCollections.observableArrayList();
private ObservableList dataDelVisite = FXCollections.observableArrayList();
@FXML
private LatteController latteLController;
private ObservableList dataLatte = FXCollections.observableArrayList();
private ObservableList dataDelLatte = FXCollections.observableArrayList();
@FXML
private PartiController partiLController;
private ObservableList dataParti = FXCollections.observableArrayList();
private ObservableList 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);
}
}
并且每个控制器的set方法明显改变
public void setData(ObservableList data, ObservableList dataDel) {
this.data = data;
this.dataDel = dataDel;
liveSearh();
}