问题描述
我遇到一种情况,当将项目逐一添加到根目录时,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();
}
}
您可以看到第二个项目周围有一个蓝色矩形(我认为这意味着该项目已聚焦)。使用treeView.refresh()
或treeView.getFocusModel()
似乎并不能解决问题,但是,一旦我使用键盘和鼠标与TreeView进行交互,一切都会得到纠正。
如果我更改上面的代码,用add
替换了对addAll
的三个调用,那么在窗口打开时什么也不会被选择或聚焦。
我注意到,如果将 root 节点添加到TreeView
之后,所有项目均已添加到该节点,则树状视图的状态在使用add
或addAll
时保持一致;在这些情况下,TreeView
中的第一项被一个蓝色矩形包围。
有人能解释一下行为上的区别吗?这是错误吗?
这已使用JDK和JavaFX的15.0.1版进行了测试。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)