![](/img/trans.png)
[英]JavaFX TreeTableView exception when sorting with multiple rows selected
[英]JavaFX TreeTableView rows gone when scrolling
我一直在JDK 8
試驗TreeTableView
。 在我的程序啟動並運行后,我注意到一個問題,當我滾動時,行將被消隱。 我已嘗試過重置單元格的可見性,更新時的所有內容,希望在更新時重繪,甚至重置列的可見性。 這是一個我編寫的測試applet,顯示當你滾動樹表視圖時,行被消隱了,但對於表視圖,情況並非如此。
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解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.