Я делаю проект 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, когда я нажимаю на него повторно :)
selectionModel.select(tabs)
вместоselectionModel.select(tab)
в циклеfor
? (Было бы понятнее, если бы вы переместилиTab tab = new Tab()
после цикла.) - person James_D   schedule 30.09.2016