У меня есть сцена, в которой есть TabPane tabPane
, с одной «основной» вкладкой и другими вкладками (Connection
- это пользовательский класс).JavaFX - доступ к динамически созданной вкладке контроллера
Я реализую эти вкладки динамически.
@Override
public void connectionCreatedEvent(Connection connection) {
try {
Tab tab = new Tab();
//...
tab.setContent(FXMLLoader.load(getClass().getResource("../fxml/connectionTab.fxml")));
Platform.runLater(() -> {
tabPane.getTabs().add(tab);
tabPane.getSelectionModel().select(tab);
});
connectionTabs.put(connection, tab);
} catch (IOException e) {
e.printStackTrace();
}
}
В настоящее время, в connectionTab.fxml
Заявляю контроллер (ConnectionTabController
).
Как я могу получить доступ к этому контроллеру табуляции из этого класса? Или мне нужно это по-другому?
Я застрял на:
@Override
public void connectionLogEvent(Connection connection, String msg) {
System.out.println("-t-connection log : " + connection + " : " + msg);
for(Object o : connectionTabs.entrySet()) {
Map.Entry ct = (Map.Entry)o;
if(ct.getKey() == connection)
/* ???(Tab)ct.getKey().getController();??? */
}
}
Это логично только мне, что это где-то в пределах Content
(так как я устанавливаю его раньше), но я до сих пор не могу найти, как добраться это, или если это даже возможно.
Любая помощь более чем приветствуется!
Хорошо, так что это не будет спагетти, если бы я создал еще один класс 'ControllerTab', что просто (get + set) вкладку и ее контроллер и изменить «HashMap» на «HashMap»? Это то, что перешло мне в голову, но я подумал, что может быть более простой способ связаться с контроллером. –
NemanjaT
Возможно, рассмотрим класс 'ControllerTab extends Tab', который загружает сам FXML и использует [этот шаблон] (http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml. HTML # custom_components). Таким образом вы просто помещаете их на свою карту, и вы можете напрямую обращаться к методам контроллера или добавлять/удалять их из панели вкладок (так как они являются вкладками и т. Д.). –
Хорошо, спасибо вам большое! Много очков для вас, сэр. Думаю, я это сделаю, швы достаточно логичны. – NemanjaT