我在程序中构建了一个树
protected UITree getBillTree() {
if (m_tree == null) {
m_tree = new UITree();
m_tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
//m_tree.getSelectionModel().getSelectionPaths();
m_tree.addTreeSelectionListener(new BillTreeSelectAdapter());
}
return m_tree;
}
现在我多选,想获得多选的路径。如何获得??
我用下列方法:
TreePath[] paths=((ProjectDoc)getBillUI()).getBillTree().getSelectionModel().getSelectionPaths();
TreePath[] paths1=((ProjectDoc)getBillUI()).getBillTree().getSelectionPaths();

只能获得最后选择的path. 为什么??

解决方案 »

  1.   

    BillTreeSelectAdapter()这个监听没研究过,不过你的问题很明显。
    你每选一个就监听一次,但只监听当前选择的(也就是刚点击的),前面选的就无效了,所以只能获得最后选择的path。
    解决办法:
    m_tree.addTreeSelectionListener(new BillTreeSelectAdapter(){
         public void ??(){//BillTreeSelectAdapter()里面肯定会有方法,重写监听的方法
         TreePath path=((ProjectDoc)getBillUI()).getBillTree().getSelectionModel().getSelectionPaths();
         //把TreePath[]定义到监听器外面,然后把path加到TreePath[]里,这样每监听一次就多一个path,
         //解决,具体没试过,只是提供思路
    }
    });
      

  2.   

    树形是可以多选,我可以按着ctrl建多选,也可已单选,BillTreeSelectAdapter的valuechange()每次改变几点就会执行一次,同时要记录他的路径到
    一个Vector ,也就是我点一次就会记录一次,这样会出问题的
      

  3.   

    思路一:
    你可以得到当前点击的节点是被选中还是没被选中吗?如果可以,加个判断。选中了加,不选中了从Vector。
    思路二:
    先得到当前点击的节点的路径,判断它在Vector中是否存在。不存在add,已存在的话remove。
    这样就不会有你说的问题了
      

  4.   

    如果我单选,那么我点几个节点 Vector就会记录几个,而实际上我应该只记录最后一个才对。实际让如果我没有按ctrl建,我应该现将Vector清空,再记录。
    现在的问题是我没法区分多选还单选。给写代码看看,谢谢
      

  5.   

    有没有类似getSelectionCount()的方法来获得选中的个数?
    我没有UITree,所以没办法写。只有提供思路,如果你能获得选中的个数,步骤如下(都写在监听里面):
     1.先得到当前点击的节点的路径,判断它在Vector中是否存在。
      1.1已存在的话remove(不用管单选多选)。
      1.2不存在的话
          1.2.1如果选中的个数>1,多选
          1.2.2如果选中的个数=1,单选
    这样应该行了。
      

  6.   

    有 这个方法getSelectionCount(),但没法根据他来判断多选还是单选,因为他的值是根据getSelectionModel().SetSelectionPaths(TreePath[] paths)获得的,你赛一次,getSelectionCount()就加一;也就是你选一次他加一次。UITree改为在JTREE
    public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
    TreePath[] path = e.getPaths();
    TableTreeNode node=(TableTreeNode) e.getPath().getLastPathComponent();
    getBillTree().getSelectionModel().addSelectionPaths(path);
                             int count=getBillTree().getSelectionModel().getSelectionCount();}