gpt4 book ai didi

滚动时 JavaFX TreeTableView 行消失

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:27 24 4
gpt4 key购买 nike

我一直在试验 JDK 8 中的 TreeTableView。在我的程序启动并运行后,我注意到一个问题,即当我滚动时,行会被清空。我已经尝试了一切,从重置单元格的可见性,更新时希望它在更新时重绘,甚至重置列的可见性。这是我编写的一个测试小程序,用于显示当您滚动查看树 TableView 时,行会被清空,但对于 TableView ,情况并非如此。

public class TableViewTest extends Application{

private TreeTableView treeTable = new TreeTableView();
private TableView regularTable = new TableView();

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) throws Exception {

final ObservableList<Person> data = FXCollections.observableArrayList(
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com"),
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com")
);


// REGULAR TABLE -------------------------------------------------------------------------
Scene tableScene = new Scene(new Group());
Stage tableStage = new Stage();
tableStage.setTitle("Table View Sample");
tableStage.setWidth(300);
tableStage.setHeight(500);

tableStage.show();
regularTable.getItems().addAll(data);

regularTable.setEditable(true);

TableColumn regularFirstNameCol = new TableColumn("First Name");
TableColumn regularLastNameCol = new TableColumn("Last Name");
TableColumn regularEmailCol = new TableColumn("Email");

regularFirstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));
regularLastNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));
regularEmailCol.setCellValueFactory(new PropertyValueFactory<Person, String>("email"));

regularTable.getColumns().addAll(regularFirstNameCol, regularLastNameCol, regularEmailCol);

final VBox vbox1 = new VBox();
vbox1.setSpacing(5);
vbox1.setPadding(new Insets(10, 0, 0, 10));
vbox1.getChildren().addAll(regularTable);

((Group) tableScene.getRoot()).getChildren().addAll(vbox1);

tableStage.setScene(tableScene);

// TREE TABLE ----------------------------------------------------------------------------------------------------------------------
Scene scene = new Scene(new Group());
stage.setTitle("Tree Table Sample");
stage.setWidth(300);
stage.setHeight(500);

final Label label = new Label("Address Book");
label.setFont(new Font("Arial", 20));

treeTable.setEditable(true);

TreeTableColumn firstNameCol = new TreeTableColumn("First Name");
TreeTableColumn lastNameCol = new TreeTableColumn("Last Name");
TreeTableColumn emailCol = new TreeTableColumn("Email");

treeTable.getColumns().addAll(firstNameCol, lastNameCol, emailCol);

final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().addAll(label, treeTable);

((Group) scene.getRoot()).getChildren().addAll(vbox);

stage.setScene(scene);

firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("firstName"));
lastNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("lastName"));
emailCol.setCellValueFactory(new TreeItemPropertyValueFactory<Person,String>("email"));

TreeItem<Person> root = new TreeItem<Person>(new Person("TEST", "TEST", "TEST"));

treeTable.setRoot(root);
treeTable.setShowRoot(true);
root.setExpanded(true);

for (Person person : data){
TreeItem<Person> p = new TreeItem<Person>(person);
root.getChildren().add(p);
}

stage.show();


}

有没有人知道这个问题的修复/解决方案,或者这是 TreeTableView 的已知错误?

编辑:我只是用这个例子试过

https://wikis.oracle.com/display/OpenJDK/TreeTableView+API+Examples

我仍然遇到相同的行丢失/被白掉的问题。

最佳答案

感谢@Alexander Kirov 提供的解决方案。升级到 build 104 解决了这个问题。

关于滚动时 JavaFX TreeTableView 行消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com