Ich habe eine JTree
und eine awt.Canvas
. Wenn ich mehrere Objekte aus der Canvas
in objList
auswähle, möchte ich alle ausgewählten Elemente innerhalb der JTree
wie ausgewählt angezeigt. Das bedeutet zum Beispiel, wenn ich 2 Objekte ausgewählt habe, sollten beide ihre Pfade zu root erweitert werden, und auch jedes ausgewählte Objekt sollte seine entsprechenden TreeNode
ausgewählt haben. Mein JTree hat TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
. HierJava: Wie programmgesteuert mehrere Knoten in einem JTree auswählen und erweitern?
ist eine Probe des funcion erweitern i verwenden:
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;
}
In meinem aktuellen Zustand, wenn ich ein einzelnes Objekt auswählen, wird es in den JTree
ausgewählt werden und seine TreePath
wird angezeigt. Aber wenn entities
mehr als 1 Objekt ausgewählt hat, wird nichts angezeigt, mein JTree
bleibt unverändert.
* "Ich habe eine' JTree' und eine 'awt.Canvas'." * Mischen Sie nicht Swing mit AWT-Komponenten. Das 'Canvas' sollte ein' JPanel' sein oder ein Bild, das in 'JLabel' angezeigt wird. –
Ich weiß, dass ich das normalerweise nicht tun sollte (ich habe einige Probleme damit, dass das Hauptmenü hinter der Zeichenfläche expandiert), aber in diesem Fall ist die einzige Verbindung zwischen ihnen das Array von Elementen aus der Zeichenfläche, die in der Struktur dargestellt werden. Und in der GUI gibt es etwas Platz zwischen ihnen, also ist kein Schaden angerichtet/ –