每个选项卡上都有 table 视图的 JavaFX 选项卡式窗格?
JavaFX tabbed pane with a table view on each tab?
我有一个选项卡式窗格,每个选项卡上都有一个 table。我向 table 添加了不同的项目,我只希望每个选项卡向我显示 table 的各个项目。但是什么也没有出现。
当我调试时,我可以清楚地看到选项卡窗格,其中包含选项卡,包含 table 视图,包含正确的项目。
为什么这不起作用?!
谢谢!
primaryStage.setTitle("TEST");
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
TableView tv1 = new TableView();
TableView tv2 = new TableView();
TableColumn<String, String> clmn = new TableColumn<>("Test");
clmn.setPrefWidth(230);
tv1.getColumns().addAll(clmn);
tv2.getColumns().addAll(clmn);
List<String> firstItems = new ArrayList<>();
firstItems.add("ONE");
firstItems.add("TWO");
firstItems.add("THREE");
tv1.setItems(FXCollections.observableArrayList(firstItems));
List<String> secondItems = new ArrayList<>();
secondItems.add("1");
secondItems.add("2");
secondItems.add("3");
tv2.setItems(FXCollections.observableArrayList(secondItems));
TabPane tabPane = new TabPane();
BorderPane mainPane = new BorderPane();
//Create Tabs
Tab tabA = new Tab();
tabA.setText("Tab A");
tabA.setContent(tv1);
tabPane.getTabs().add(tabA);
Tab tabB = new Tab();
tabB.setText("Tab B");
tabB.setContent(tv2);
tabPane.getTabs().add(tabB);
mainPane.setCenter(tabPane);
mainPane.prefHeightProperty().bind(scene.heightProperty());
mainPane.prefWidthProperty().bind(scene.widthProperty());
root.getChildren().add(mainPane);
primaryStage.setScene(scene);
primaryStage.show();
空:
您的代码有两个问题(我立即看到):
您需要在 TableView
的每一列上设置一个单元格值工厂。没有这个,该列就没有任何数据可以显示。所以你需要像
这样的东西
clmn.setCellValueFactory(cellData -> new ReadOnlyStringWrapper(cellData.getValue()));
其次,您对两个 table 使用相同的 TableColumn
。我认为这行不通;这些单元最终会在两个不同的地方被添加到场景图中(这是不允许的)。为每个 table.
创建不同的列
我有一个选项卡式窗格,每个选项卡上都有一个 table。我向 table 添加了不同的项目,我只希望每个选项卡向我显示 table 的各个项目。但是什么也没有出现。 当我调试时,我可以清楚地看到选项卡窗格,其中包含选项卡,包含 table 视图,包含正确的项目。
为什么这不起作用?!
谢谢!
primaryStage.setTitle("TEST");
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
TableView tv1 = new TableView();
TableView tv2 = new TableView();
TableColumn<String, String> clmn = new TableColumn<>("Test");
clmn.setPrefWidth(230);
tv1.getColumns().addAll(clmn);
tv2.getColumns().addAll(clmn);
List<String> firstItems = new ArrayList<>();
firstItems.add("ONE");
firstItems.add("TWO");
firstItems.add("THREE");
tv1.setItems(FXCollections.observableArrayList(firstItems));
List<String> secondItems = new ArrayList<>();
secondItems.add("1");
secondItems.add("2");
secondItems.add("3");
tv2.setItems(FXCollections.observableArrayList(secondItems));
TabPane tabPane = new TabPane();
BorderPane mainPane = new BorderPane();
//Create Tabs
Tab tabA = new Tab();
tabA.setText("Tab A");
tabA.setContent(tv1);
tabPane.getTabs().add(tabA);
Tab tabB = new Tab();
tabB.setText("Tab B");
tabB.setContent(tv2);
tabPane.getTabs().add(tabB);
mainPane.setCenter(tabPane);
mainPane.prefHeightProperty().bind(scene.heightProperty());
mainPane.prefWidthProperty().bind(scene.widthProperty());
root.getChildren().add(mainPane);
primaryStage.setScene(scene);
primaryStage.show();
空:
您的代码有两个问题(我立即看到):
您需要在 TableView
的每一列上设置一个单元格值工厂。没有这个,该列就没有任何数据可以显示。所以你需要像
clmn.setCellValueFactory(cellData -> new ReadOnlyStringWrapper(cellData.getValue()));
其次,您对两个 table 使用相同的 TableColumn
。我认为这行不通;这些单元最终会在两个不同的地方被添加到场景图中(这是不允许的)。为每个 table.