I have been experimenting with the TreeTableView
in JDK 8
. After getting my program up and functioning, I noticed a problem that when I scrolled, rows would be getting blanked out. I have tried everything from resetting the visibility of the cell, when it updates, in hopes that it would redraw when it gets updated, or even resetting the visibility of the column. Here is a test applet I wrote to show that when you scroll for a tree table view, the rows get blanked out, but for a table view, this is not the case.
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();
}
Does anybody know a fix / solution for this, or is this a known bug with the TreeTableView
?
EDIT: I just tried this using this example
https://wikis.oracle.com/display/OpenJDK/TreeTableView+API+Examples
and I still get the same issue of rows missing / being whited out.