【发布时间】:2016-09-30 02:35:13
【问题描述】:
我正在做一个 JavaFx 项目。我有一个表格视图,其中包含几个名称(例如 BG Manager 、 User Management 、 Find Acl 、....)。每次我单击这些名称中的每一个(或该表的每一行)时,它都会打开一个新选项卡,该选项卡再次填充我之前在里面设置的信息。这是一个示例函数,一旦我单击名为 BG Management 的行,就会调用该函数:
private void callBGManager(){
try {
Tab tab = new Tab ();
FXMLLoader bgm = new FXMLLoader(getClass().getResource("/views/BGMWindow.fxml"));
BGMController bgmc = new BGMController(_session);
bgm.setController(bgmc);
Parent root = bgm.load();
for (Tab tabs : TabPane1.getTabs()){
if (tabs.getText().equals(ListView1.getSelectionModel().getSelectedItem())){
SingleSelectionModel<Tab> selectionModel = TabPane1.getSelectionModel();
selectionModel.select(tab);
return;
}
}
tab.setContent(root);
tab.setText(ListView1.getSelectionModel().getSelectedItem());
tab.closableProperty().set(true);
TabPane1.setTabClosingPolicy(TabPane1.getTabClosingPolicy().SELECTED_TAB);
TabPane1.getTabs().add(tab);
SingleSelectionModel<Tab> selectionModel = TabPane1.getSelectionModel();
selectionModel.select(tab);
}catch(Exception e){
e.printStackTrace();
}
}
这段代码运行良好,编译或运行没有问题。这是更好地了解情况的方案。我在我的列表中有 5 行,每次我点击每行时,如果它还没有打开,它就会显示出来,如果它已经打开,什么也不会发生。假设我已经在另一个选项卡视图中并且 BG Manager 已经打开。再次点击后如何切换到 BG Manager :)
【问题讨论】:
-
您肯定只想在
for循环中使用selectionModel.select(tabs)而不是selectionModel.select(tab)? (如果将Tab tab = new Tab()移到循环之后,会更清楚。)
标签: javafx tabview fxmlloader