Hi,
please consider the following simple test case and the attachments. Start scrolling with the scrollbar or the mouse wheel and see the strange behavior. It is related to the setGraphic method. If I don't use it, it works fine.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class TestApp3 extends Application {
public static void main(String[] args) throws Exception {
launch(args);
}
public void start(final Stage stage) throws Exception {
VBox root = new VBox();
TreeView<String> treeView = new TreeView<String>(new TreeItem<String>());
treeView.setShowRoot(false);
treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
@Override
public TreeCell<String> call(TreeView<String> stringTreeView) {
TreeCell<String> treeCell = new TreeCell<String>() {
@Override
protected void updateItem(String item, boolean isEmpty) {
super.updateItem(item, isEmpty);
if (item != null) {
if (!item.startsWith("Sub")) {
Label label = new Label(item);
setGraphic(label);
} else {
setText(item);
}
getTreeItem().setExpanded(true);
}
}
};
return treeCell;
}
});
for (int i = 0; i < 20; i++) {
TreeItem<String> treeItem = new TreeItem<String>();
treeItem.setValue("TreeItem " + i);
for (int j = 0; j < 5; j++) {
TreeItem<String> subTreeItem = new TreeItem<String>();
subTreeItem.setValue("SubTreeItem" + i + "." + j);
treeItem.getChildren().add(subTreeItem);
}
treeView.getRoot().getChildren().add(treeItem);
}
root.getChildren().add(treeView);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
}
please consider the following simple test case and the attachments. Start scrolling with the scrollbar or the mouse wheel and see the strange behavior. It is related to the setGraphic method. If I don't use it, it works fine.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class TestApp3 extends Application {
public static void main(String[] args) throws Exception {
launch(args);
}
public void start(final Stage stage) throws Exception {
VBox root = new VBox();
TreeView<String> treeView = new TreeView<String>(new TreeItem<String>());
treeView.setShowRoot(false);
treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
@Override
public TreeCell<String> call(TreeView<String> stringTreeView) {
TreeCell<String> treeCell = new TreeCell<String>() {
@Override
protected void updateItem(String item, boolean isEmpty) {
super.updateItem(item, isEmpty);
if (item != null) {
if (!item.startsWith("Sub")) {
Label label = new Label(item);
setGraphic(label);
} else {
setText(item);
}
getTreeItem().setExpanded(true);
}
}
};
return treeCell;
}
});
for (int i = 0; i < 20; i++) {
TreeItem<String> treeItem = new TreeItem<String>();
treeItem.setValue("TreeItem " + i);
for (int j = 0; j < 5; j++) {
TreeItem<String> subTreeItem = new TreeItem<String>();
subTreeItem.setValue("SubTreeItem" + i + "." + j);
treeItem.getChildren().add(subTreeItem);
}
treeView.getRoot().getChildren().add(treeItem);
}
root.getChildren().add(treeView);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
}