I have created an issue for this on GitHub. https://github.com/javafxports/openjdk-jfx/issues/607
/Sverre man. 26. aug. 2019 kl. 20:03 skrev Sverre Moe <sverre....@gmail.com>: > I think I have found a bug/regression with Java 11 regarding TreeTableView. > This has worked fine on JavaFX 8, but is messed up with JavaFX 11. > 1) The arrow button is on the text > 2) No text indentation levels: Each row (no matter the level) is at the > left edge of the TreeTableView. > > I can file an issue at GitHub if this is a real bug/regression. I just > wanted to check first here. > > TreeTableColumn<OurDataObject, Label> column = new > TreeTableColumn<>("Column"); > column.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(new > OurDataObjectLabel(param.getValue().getValue()))); > > We are using Label here so we can set StyleClass based on some information > in the OurDataObject. > > class OurDataObject { > private String name; > public String getName() { return name; } > } > > class AlsoOurDataObject extends OurDataObject { > public boolean isSomething() { ... } > } > > class OurDataObjectLabel extends Label() { > public OurDataObjectLabel(OurDataObject ourDataObject) { > setText(ourDataObject.getName()); > if (ourDataObject instanceof AlsoOurDataObject) { > if (((AlsoOurDataObject) ourDataObject).isSomething()) { > getStyleClass().add("style"); > } > } > } > } > > A workaround was to use OurDataObject for both types in the > TreeTableColumn, create a CellFactory to do what has been done in > OurDataObjectLabel and in addition to the CellValueFactory. > > Code Example for reproducing the problem: > This is using a String instead of an Object as the data model for > simplicity. > I have attached a screenshot that illustrates this problem. Made with the > example code below. > > import javafx.application.Application; > import javafx.beans.property.ReadOnlyObjectWrapper; > import javafx.scene.Scene; > import javafx.scene.control.TreeItem; > import javafx.scene.control.TreeTableColumn; > import javafx.scene.control.TreeTableView; > import javafx.scene.layout.StackPane; > import javafx.scene.text.Text; > import javafx.stage.Stage; > > public class App extends Application { > > public static void main(String[] args) { > App.launch(args); > } > > @Override > public void start(Stage stage) throws Exception { > StackPane root = new StackPane(); > > TreeTableView<String> treeTableView = new TreeTableView<>(); > treeTableView.setShowRoot(false); > root.getChildren().add(treeTableView); > > TreeTableColumn<String, Text> column = new > TreeTableColumn<>("Column"); > column.setPrefWidth(200); > treeTableView.getColumns().add(column); > > column.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>( > new Text(param.getValue().getValue()))); > > TreeItem<String> rootItem = new TreeItem<>(""); > treeTableView.setRoot(rootItem); > > TreeItem<String> item1 = new TreeItem<>("LEVEL1"); > item1.setExpanded(true); > rootItem.getChildren().add(item1); > > TreeItem<String> item2 = new TreeItem<>("LEVEL2"); > item2.setExpanded(true); > item1.getChildren().add(item2); > > TreeItem<String> item3 = new TreeItem<>("LEVEL2_1"); > item3.setExpanded(true); > item2.getChildren().add(item3); > > Scene scene = new Scene(root, 250, 150); > > stage.setTitle("JavaFX11"); > stage.setScene(scene); > stage.show(); > } > } > > > /Sverre > >