Я бы хотел динамически добавлять TableView
во вкладки.Теперь я хотел бы иметь доступ к контроллерам.Я не знаю, как это сделать.Вот код:
пример.fxml код:
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<TabPane fx:id="tabPane">
</TabPane>
</GridPane>
Контроллер:
public class Controller {
@FXML
private TabPane tabPane;
public TabPane getTabPane() {
return tabPane;
}
public void setTabPane(TabPane tabPane) {
this.tabPane = tabPane;
}
}
FXMLTableView.fxml код:
<AnchorPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="sample.ControllerFXMLTableView"
prefHeight="400.0" prefWidth="600.0">
<TableView>
<columns>
<TableColumn fx:id="columnName" text="name"/>
<TableColumn text="surname"/>
</columns>
</TableView>
</AnchorPane>
иконтроллер:
public class ControllerFXMLTableView {
@FXML
private TableColumn columnName;
public ControllerFXMLTableView() {}
public TableColumn getColumnName() {
return columnName;
}
public void setColumnName(TableColumn columnName) {
this.columnName = columnName;
}
}
И в Main.java у меня есть этот код:
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loaderSample = new FXMLLoader(getClass().getResource("sample.fxml"));
Parent root = loaderSample.load();
Controller controller = loaderSample.getController();
TabPane tabPane = controller.getTabPane();
List<String> listMonths = List.of("January", "February", "March", "April");
listMonths.forEach(itemList -> {
try {
Tab tabTemp = new Tab(itemList.toString());
AnchorPane anchorPane = FXMLLoader.load(getClass().getResource("FXMLTableView.fxml"));
tabTemp.setContent(anchorPane);
tabPane.getTabs().add(tabTemp);
} catch(Exception ex){}
});
stage.setTitle("Hello World");
stage.setScene(new Scene(root, 300, 275));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Не уверен, что это правильный способ, которым я должен это сделать.Хотелось бы узнать приемлемое загрязнение.Теперь я хотел бы иметь доступ к столбцу, помеченному fx:id="columnName"
.Как получить доступ к ControllerFXMLTableView
для каждой вкладки?
12 месяцев - это не так уж много, чтобы просто кодировать его в fxml (и у него нет проблем с динамическим кодом), но для этого просто необходим цикл.