java中如何传递参数给控制器_java - JavaFX,在tabs控制器之间传递参数 - 堆栈内存溢出...

在JavaFX应用中,作者面临一个挑战:如何在Tab布局之间传递ObservableList数据到各自的控制器。他们不想使用单一控制器,因为每个Tab有自己的模型类和大量代码。解决方案是在主控制器中初始化每个Tab的控制器,并将数据通过setter方法传递给它们。每个控制器接收数据并进行处理,如进行实时搜索。
摘要由CSDN通过智能技术生成

在问这个问题之前,我在任何地方寻找解决方案,如果它已经存在请报告。

在实践中我有这种情况:

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9uemVTNC5qcGc=

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值