如何在JXTreeTable中选择父节点和所有子节点?

时间:2013-01-08 11:06:10

标签: java swing selection swingx jxtreetable

我需要在JXTreeTable中为已点击的父级及其所有子节点选择行。在旧的Swingx中,已弃用的JXTreeTable可以使用TreeSelectionListener完成。我有听众(mTable已弃用JXTreeTable):

 mTable.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {    
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                selectionPerformered(evt);
            }
        });

和方法selectionPerformed(evt):

private void selectionPerformered(javax.swing.event.TreeSelectionEvent evt) {
        boolean unlock = true;
        TreePath parentPath = evt.getNewLeadSelectionPath();
        if (parentPath != null) {
            ListSelectionModel list = mTable.getSelectionModel();
            TreeNode node = ((TreeNode) (parentPath.getLastPathComponent()));
            if (node.getChildCount() > 0) {
                TreePath path = new TreePath(
                        ((DefaultTreeTableModel) mTable.getTreeTableModel()).getPathToRoot((TreeTableNode) node.getChildAt(0)));
                int begin = mTable.getRowForPath(path);
                path = new TreePath(
                        ((DefaultTreeTableModel) mTable.getTreeTableModel()).getPathToRoot((TreeTableNode) node.getChildAt(node.getChildCount() - 1)));
                int end = mTable.getRowForPath(path);
                list.addSelectionInterval(begin, end);
            }
            unlock = false;
        }
        disableUnlock(unlock);
    }

当我点击“Components”事件时,几次触发并使用list.addSelectionInterval(开始,结束);选择工作正常,看起来像这样:

good one

但现在,使用新的swingx 1.6,使用新的JXTreeTable,当我在调试模式下单击“Components”时,此事件仅触发一次,因此结果如下所示:

bad one

例如,如果我单击“admin”程序选择此行,接下来的3行及其子项。但是,如果我点击“组件”,我需要为孩子和每个孩子的孩子选择这一行和所有行。如果你知道我的意思:)是否有办法解雇这个事件?或者可能还有另一种选择方式吗?

0 个答案:

没有答案