Tôi có JTree
và awt.Canvas
. Khi tôi chọn nhiều đối tượng từ trong số Canvas
vào objList
, tôi muốn tất cả các mục được chọn sẽ được hiển thị bên trong JTree
như được chọn. Điều đó có nghĩa là ví dụ nếu tôi có 2 đối tượng được chọn, cả hai đường dẫn đến thư mục gốc sẽ được mở rộng và mỗi đối tượng được chọn sẽ có một số đối tượng được chọn tương ứng là TreeNode
. My JTree có TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
.Java: Làm thế nào để lập trình lựa chọn và mở rộng nhiều nút trong một JTree?
Dưới đây là một mẫu của các mở rộng funcion tôi sử dụng:
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;
}
Trong trạng thái hiện tại của tôi, nếu tôi chọn một đối tượng duy nhất, nó sẽ được chọn trong JTree
và TreePath
của nó sẽ được hiển thị. Nhưng nếu entities
có hơn 1 đối tượng được chọn, nó sẽ không hiển thị gì cả, JTree
của tôi sẽ không thay đổi.
* "Tôi có' JTree' và 'awt.Canvas'." * Không trộn Swing với các thành phần AWT. 'Canvas' phải là' JPanel' hoặc một hình ảnh được hiển thị trong 'JLabel'. –
Tôi biết tôi không nên làm điều đó (tôi có một số vấn đề với menu chính mở rộng phía sau canvas), nhưng trong trường hợp này, kết nối duy nhất giữa chúng là mảng thực thể từ canvas được biểu diễn trong cây. Và trong GUI có một số không gian giữa chúng, vì vậy không có hại được thực hiện/ –