我在程序中构建了一个树
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. 为什么??
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. 为什么??
你每选一个就监听一次,但只监听当前选择的(也就是刚点击的),前面选的就无效了,所以只能获得最后选择的path。
解决办法:
m_tree.addTreeSelectionListener(new BillTreeSelectAdapter(){
public void ??(){//BillTreeSelectAdapter()里面肯定会有方法,重写监听的方法
TreePath path=((ProjectDoc)getBillUI()).getBillTree().getSelectionModel().getSelectionPaths();
//把TreePath[]定义到监听器外面,然后把path加到TreePath[]里,这样每监听一次就多一个path,
//解决,具体没试过,只是提供思路
}
});
一个Vector ,也就是我点一次就会记录一次,这样会出问题的
你可以得到当前点击的节点是被选中还是没被选中吗?如果可以,加个判断。选中了加,不选中了从Vector。
思路二:
先得到当前点击的节点的路径,判断它在Vector中是否存在。不存在add,已存在的话remove。
这样就不会有你说的问题了
现在的问题是我没法区分多选还单选。给写代码看看,谢谢
我没有UITree,所以没办法写。只有提供思路,如果你能获得选中的个数,步骤如下(都写在监听里面):
1.先得到当前点击的节点的路径,判断它在Vector中是否存在。
1.1已存在的话remove(不用管单选多选)。
1.2不存在的话
1.2.1如果选中的个数>1,多选
1.2.2如果选中的个数=1,单选
这样应该行了。
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();}