JavaFX树视图状态不正确

问题描述

我遇到一种情况,当将项目逐一添加到根目录时,JavaFX TreeView的状态不正确,可以使用下面的代码重新创建。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) {

        TreeView<String> treeView = new TreeView<>();
        TreeItem<String> root = new TreeItem<>("Root");
        treeView.setRoot(root);
        treeView.setShowRoot(false);
        
        root.getChildren().add(new TreeItem<>("Foo"));
        root.getChildren().add(new TreeItem<>("Bar"));
        root.getChildren().add(new TreeItem<>("Baz"));

        var scene = new Scene(new StackPane(treeView),640,480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

JavaFX TreeView bug

您可以看到第二个项目周围有一个蓝色矩形(我认为这意味着该项目已聚焦)。使用treeView.refresh()treeView.getFocusModel()似乎并不能解决问题,但是,一旦我使用键盘和鼠标与TreeView进行交互,一切都会得到纠正。

如果我更改上面的代码,用add替换了对addAll的三个调用,那么在窗口打开时什么也不会被选择或聚焦。

我注意到,如果将 root 节点添加TreeView 之后,所有项目均已添加到该节点,则树状视图的状态在使用addaddAll时保持一致;在这些情况下,TreeView中的第一项被一个蓝色矩形包围。

有人能解释一下行为上的区别吗?这是错误吗?

这已使用JDK和JavaFX的15.0.1版进行了测试。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)