我有一个JTree
和一个awt.Canvas
。当我从Canvas
中选择多个对象到objList
中时,我希望所选的所有项目都显示在选中的JTree
之内。这意味着例如,如果我选择了2个对象,则它们的根路径都应该展开,并且每个选定的对象也应该选择其对应的TreeNode
。我的JTree有TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
。Java:如何以编程方式选择并扩展JTree中的多个节点?
这里是扩大funcion我使用的一个示例:
public void selectTreeNodes() {
HashMap <String, MyEntity> entities = ...;
Iterator it = entities.keySet().iterator();
while (it.hasNext()) {
String str = it.next().toString();
MyEntity ent = entities.get(str);
if (ent.isSelected()) {
DefaultMutableTreeNode searchNode = searchNode(ent.getName());
if (searchNode != null) {
TreeNode[] nodes = ((DefaultTreeModel) tree.getModel()).getPathToRoot(searchNode);
TreePath tpath = new TreePath(nodes);
tree.scrollPathToVisible(tpath);
tree.setSelectionPath(tpath);
}
}
}
}
public DefaultMutableTreeNode searchNode(String nodeStr)
{
DefaultMutableTreeNode node = null;
Enumeration enumeration= root.breadthFirstEnumeration();
while(enumeration.hasMoreElements()) {
node = (DefaultMutableTreeNode)enumeration.nextElement();
if(nodeStr.equals(node.getUserObject().toString())) {
return node;
}
}
//tree node with string node found return null
return null;
}
以我的当前状态,如果我选择单个对象时,它会在JTree
被选择和其TreePath
将被显示。 但是,如果entities
选择了多个对象,它将不会显示任何内容,我的JTree
将保持不变。
*“我有JTree'和'awt.Canvas'。”*不要将Swing与AWT组件混合使用。 'Canvas'应该是'JPanel'或者一个以'JLabel'显示的图像。 – 2012-04-20 10:03:32
我知道我通常不应该这样做(我在扩展后的主菜单中存在一些问题),但在这种情况下,它们之间的唯一连接是来自画布中实体的数组,它们在树中表示。而在GUI中它们之间有一些空间,所以没有造成伤害/ – 2012-04-20 11:58:01