我想将TableView
动态添加到标签。现在,我想访问控制器。我不知道该怎么做。这是代码:
sample.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
?
仅用fxml进行编码(对于动态代码没有问题)的12个月并不是很多,但这只是要求循环。
答案 0 :(得分:2)
如何为每个选项卡访问ControllerFXMLTableView?
只需在forEach
循环中执行此操作:
FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLTableView.fxml"));
AnchorPane anchorPane = loader.load();
ControllerFXMLTableView tabController = loader.getController();
TableColumn column = tabController.getColumnName();
编辑:要烦恼引用供以后使用,您可以定义一个适当的容器,例如Map<String,TableColumn> columns = new HashMap<>();
并使用它:
columns.put(itemList, tabController.getColumnName());