我知道01 12 * * * /usr/bin/supervisorctl restart {instance name}
对象是由TreeCell
使用单元工厂动态生成的。
有没有办法获取当前存在的所有TreeView
个对象的列表?
我想我可以通过修改单元工厂来跟踪它们。就像在每次创建新单元格时,将其添加到某个列表中。但是,当TreeView处理它们时,我不确定如何从列表中删除单元格(因为它们不在视图中)。
答案 0 :(得分:1)
我的解决方法是使用weak references:
[A]弱引用是一个引用,它不保护引用的对象不被垃圾收集器[。]
收集。
所以,将它添加到你的控制器:
private final Set<MyTreeCell> myTreeCells = Collections.newSetFromMap(new WeakHashMap<>());
让你的CellFactory看起来像这样:
myTreeView.setCellFactory((treeItem) -> {
MyTreeCell c = new MyTreeCell(icf);
Platform.runLater(() -> myTreeCells.add(c));
return c;
});
现在,myTreeCells
将始终包含当前存在的TreeCell。
使用反射来获取TreeCell列表还有另一种非常难看的解决方案。请注意,就我所知,此List是一个时间点的JavaFXs TreeCell列表的快照。它没有后盾。
@SuppressWarnings({ "unchecked" })
private Set<MyTreeCell> getListOfTreeCells() {
try {
final Field f = VirtualContainerBase.class.getDeclaredField("flow");
f.setAccessible(true);
final Field g = VirtualFlow.class.getDeclaredField("cells");
g.setAccessible(true);
final Set<MyTreeCell> s = new HashSet<>();
s.addAll((ArrayLinkedList<MyTreeCell>) g
.get((f.get((myTreeView.skinProperty().get())))));
return s;
}
catch (NoSuchFieldException | SecurityException | IllegalArgumentException
| IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
答案 1 :(得分:0)
treeView.lookupAll(".tree-cell");
这将返回一组可以转换为TreeCells的节点。