微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaFX树视图状态不正确

如何解决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 举报,一经查实,本站将立刻删除。