繁体   English   中英

JavaFX-在TreeView中将TreeItem向下移动

[英]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在其父子列表中上移。

  1. 如果您使用视图控制器模型设置,请在模型中进行重新排序,树将相应更新
  2. 如果只想更改视图而不是模型,请在自己的TreeItem实现的getChildren()方法中使用重新排序
  3. 如果您的视图也代表模型(数据本身),则可以使用下面的代码。

在应向上移动的节点上运行以下方法:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM