[英]JavaFX - move TreeItem up down in TreeView
我有一个看起来像这样的树状视图。
-Root
--Parent 1
----Child 1
----Child 2
----Child 3
--Parent 2
----Child 1
----Child 2
我遍历了SO和Google,但找不到在树列表中上下移动TreeItems的正确方法。 这可能吗?
我并不是说要移动child
节点,而是要移动父母时,我也需要孩子也一起移动。 因此,将“ Parent 2
上移会像这样。
-Root
--Parent 2
----Child 1
----Child 2
--Parent 1
----Child 1
----Child 2
----Child 3
我建议使用SortedList
而不是ObservableList
作为JavaFX TreeView
的后备列表。
在SortedList
有一个comparatorProperty
,每当它改变时, List
被相应地重新排序。 易如反掌 ;-)
您必须将TreeItem在其父子列表中上移。
在应向上移动的节点上运行以下方法:
static void moveUp(TreeItem item) {
if (item.getParent() instanceof TreeItem) {
TreeItem parent = item.getParent();
List<TreeItem> list = new ArrayList<TreeItem>();
Object prev = null;
for (Object child : parent.getChildren()) {
if (child == item) {
list.add((TreeItem)child);
} else {
if (prev != null) list.add((TreeItem)prev);
prev = child;
}
}
if (prev != null) list.add((TreeItem)prev);
parent.getChildren().clear();
parent.getChildren().addAll(list);
}
}
那是丑陋的Java代码,但是行得通。 下移是相似的。
子级将跟随,因为TreeView自动重绘
public void moveDown() {
if (selectedItem != null) {
TreeItem item = selectedItem;
int index = item.getParent().getChildren().indexOf(item);
if(index != item.getParent().getChildren().size()-1)
{
TreeItem safeItem = (TreeItem) item.getParent().getChildren().get(index+1);
item.getParent().getChildren().set(index+1, item);
item.getParent().getChildren().set(index, safeItem);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.