-
Bug
-
Resolution: Not an Issue
-
P4
-
8
To reproduce:
Push "Show row indexes" button.
Initial root state is "collapsed", so other items are invisible.
But get row doesn't return -1 for them.
import com.sun.javafx.runtime.VersionInfo;
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class JavaFXApplication6 extends Application {
TreeTableView<Person> treeTableView;
@Override
public void start(Stage primaryStage) {
initTreeTableView();
HBox root = new HBox(10.0);
root.getChildren().add(treeTableView);
Button btnRowInd = new Button("Show row indexes");
btnRowInd.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
TreeItem<Person> r = treeTableView.getRoot();
int row = treeTableView.getRow(r);
System.out.println(r.getValue().firstName + "; row = " + row);
showTreeItemRowIndex(r);
}
private void showTreeItemRowIndex(TreeItem<Person> r) {
for (TreeItem<Person> item : r.getChildren()) {
int row = treeTableView.getRow(item);
System.out.println(item.getValue().firstName + "; row = " + row);
showTreeItemRowIndex(item);
}
}
});
root.getChildren().add(btnRowInd);
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle(VersionInfo.getRuntimeVersion());
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void initTreeTableView() {
treeTableView = new TreeTableView<>();
treeTableView.setMinSize(200, 150);
treeTableView.setPrefSize(250, 200);
treeTableView.setMaxSize(300, 250);
treeTableView.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY);
TreeItem<Person> root = new TreeItem<>(new Person("John Smith", 32));
treeTableView.setRoot(root);
treeTableView.showRootProperty().set(true);
final TreeTableColumn<Person, String> firstNameCol = new TreeTableColumn<>("First name");
firstNameCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<Person, String> p) {
return p.getValue().getValue().firstName;
}
});
TreeTableColumn<Person, Number> ageCol = new TreeTableColumn<>("Age");
ageCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Number>, ObservableValue<Number>>() {
@Override
public ObservableValue<Number> call(CellDataFeatures<Person, Number> p) {
return p.getValue().getValue().age;
}
});
treeTableView.getColumns().addAll(firstNameCol, ageCol);
Person p = new Person("Angela Davis", 33);
treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
p = new Person("John Malkovich", 100);
treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
for (int i = 0; i < 19; i++) {
p = new Person("Item - " + i, 100);
treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
}
}
}
class Person {
public final SimpleStringProperty firstName;
public final SimpleIntegerProperty age;
public Person(String name, int age) {
this.firstName = new SimpleStringProperty(name);
this.age = new SimpleIntegerProperty(age);
}
}
Push "Show row indexes" button.
Initial root state is "collapsed", so other items are invisible.
But get row doesn't return -1 for them.
import com.sun.javafx.runtime.VersionInfo;
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class JavaFXApplication6 extends Application {
TreeTableView<Person> treeTableView;
@Override
public void start(Stage primaryStage) {
initTreeTableView();
HBox root = new HBox(10.0);
root.getChildren().add(treeTableView);
Button btnRowInd = new Button("Show row indexes");
btnRowInd.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
TreeItem<Person> r = treeTableView.getRoot();
int row = treeTableView.getRow(r);
System.out.println(r.getValue().firstName + "; row = " + row);
showTreeItemRowIndex(r);
}
private void showTreeItemRowIndex(TreeItem<Person> r) {
for (TreeItem<Person> item : r.getChildren()) {
int row = treeTableView.getRow(item);
System.out.println(item.getValue().firstName + "; row = " + row);
showTreeItemRowIndex(item);
}
}
});
root.getChildren().add(btnRowInd);
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle(VersionInfo.getRuntimeVersion());
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void initTreeTableView() {
treeTableView = new TreeTableView<>();
treeTableView.setMinSize(200, 150);
treeTableView.setPrefSize(250, 200);
treeTableView.setMaxSize(300, 250);
treeTableView.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY);
TreeItem<Person> root = new TreeItem<>(new Person("John Smith", 32));
treeTableView.setRoot(root);
treeTableView.showRootProperty().set(true);
final TreeTableColumn<Person, String> firstNameCol = new TreeTableColumn<>("First name");
firstNameCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<Person, String> p) {
return p.getValue().getValue().firstName;
}
});
TreeTableColumn<Person, Number> ageCol = new TreeTableColumn<>("Age");
ageCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Person, Number>, ObservableValue<Number>>() {
@Override
public ObservableValue<Number> call(CellDataFeatures<Person, Number> p) {
return p.getValue().getValue().age;
}
});
treeTableView.getColumns().addAll(firstNameCol, ageCol);
Person p = new Person("Angela Davis", 33);
treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
p = new Person("John Malkovich", 100);
treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
for (int i = 0; i < 19; i++) {
p = new Person("Item - " + i, 100);
treeTableView.getRoot().getChildren().add(new TreeItem<>(p));
}
}
}
class Person {
public final SimpleStringProperty firstName;
public final SimpleIntegerProperty age;
public Person(String name, int age) {
this.firstName = new SimpleStringProperty(name);
this.age = new SimpleIntegerProperty(age);
}
}