【问题标题】:Get all TreeItems in an SWT Tree获取 SWT 树中的所有 TreeItem
【发布时间】:2013-07-03 16:36:45
【问题描述】:

我想从我的 SWT 树中获取所有 TreeItems 的数组。但是,包含在 Tree 类中的方法 getItems() 仅返回位于树的第一层的项目(即不是任何事物的孩子)。

有人可以建议一种获取所有孩子/物品的方法吗?

【问题讨论】:

    标签: java tree swt


    【解决方案1】:

    Tree#getItems()的文档很具体:

    返回接收器中包含的项目(可能为空)数组是接收器的直接项目子项。这些是树的根。

    下面是一些可以解决问题的示例代码:

    public static void main(String[] args)
    {
        Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setText("StackOverflow");
        shell.setLayout(new FillLayout());
    
        final Tree tree = new Tree(shell, SWT.MULTI);
    
        TreeItem parentOne = new TreeItem(tree, SWT.NONE);
        parentOne.setText("Parent 1");
        TreeItem parentTwo = new TreeItem(tree, SWT.NONE);
        parentTwo.setText("Parent 2");
    
        for (int i = 0; i < 10; i++)
        {
            TreeItem item = new TreeItem(parentOne, SWT.NONE);
            item.setText(parentOne.getText() + " child " + i);
    
            item = new TreeItem(parentTwo, SWT.NONE);
            item.setText(parentTwo.getText() + " child " + i);
        }
    
        parentOne.setExpanded(true);
        parentTwo.setExpanded(true);
    
        List<TreeItem> allItems = new ArrayList<TreeItem>();
    
        getAllItems(tree, allItems);
    
        System.out.println(allItems);
    
        shell.pack();
        shell.open();
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
    
    private static void getAllItems(Tree tree, List<TreeItem> allItems)
    {
        for(TreeItem item : tree.getItems())
        {
            getAllItems(item, allItems);
        }
    }
    
    private static void getAllItems(TreeItem currentItem, List<TreeItem> allItems)
    {
        TreeItem[] children = currentItem.getItems();
    
        for(int i = 0; i < children.length; i++)
        {
            allItems.add(children[i]);
    
            getAllItems(children[i], allItems);
        }
    }
    

    【讨论】:

    • 好答案,但请注意 allItems 列表不包括 tree.getItems() 返回的根元素。
    • 注意:要实现它@HennoVermeulen 等,只需在#getAllItems(Tree, List&lt;TreeItem&gt;) 内的循环中添加allItems.add(item); 作为第一条语句。
    • @Sumit 我发布的代码不限于特定级别。它适用于任意数量的级别。
    • @Baz:谢谢,你能帮我stackoverflow.com/questions/45213400/…吗?
    • @Sumit 很抱歉,但我不明白你的问题,并且不久前已经投票结束“不清楚你在问什么”。如果您可以重写您的问题并更清楚地说明您要做什么,那么也许人们将能够提供帮助。就目前而言,这个问题根本不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多