1
我想要實現一個需求,在這裏我必須在選擇或雙擊另一個節點時摺疊JTree的所有子節點。如何在選擇和展開另一個節點時自動摺疊JTree節點
我有多個服務器的Treeview,當我點擊一個服務器節點時,我維持它同時選擇了哪個服務器(lastSelectedServerName),所有其他服務器節點都應該被摺疊。
public void populateGroupsfloorsTree(List<ServerInfo> serversList) {
this.clear();
servers = serversList;
for (ServerInfo server : servers) {
ToolTipTreeNode serverNode = GROUPS_FLOOR_TREE.addServer(server);
for (Group group : server.getGroupFoor()) {
ToolTipTreeNode groupNode = GROUPS_FLOOR_TREE.addGroup(serverNode, group);
for (GroupFloor floor : group.getGroupFloors()) {
GROUPS_FLOOR_TREE.addGroupFloor(groupNode, floor);
}
}
}
String lastSelectedServerName = (String) Main.getInstance().getSettings()
.getValue(AppSettings.Property.LAST_SELECTED_SERVER, DEFAULT_SERVER);
String lastSelectedGroupId = (String) Main.getInstance().getSettings()
.getValue(AppSettings.Property.LAST_SELECTED_GROUP, DEFAULT_GROUP);
String lastSelectedFloorId = (String) Main.getInstance().getSettings()
.getValue(AppSettings.Property.LAST_SELECTED_FLOOR, DEFAULT_FLOOR);
expandGroupSelectedFloor(lastSelectedServerName, lastSelectedGroupId, lastSelectedFloorId);
}// End of populateGroupsfloorsTree method.
public void expandGroupSelectedFloor(String servername ,String groupId, String floorId) {
try {
if (((DEFAULT_GROUP).equals(groupId) || (DEFAULT_FLOOR).equals(floorId))
|| ("").equals(servername) || ("").equals(groupId) || ("").equals(floorId)) {
selectDefaultFloor();
} else if (GUIBuilderVer1.getGroupsFloorModel().getGroupFromID(groupId) == null
|| GUIBuilderVer1.getGroupsFloorModel().getGroupFloorFromUUID(
UUID.fromString(floorId)) == null) {
selectDefaultFloor();
} else {
Group group = GUIBuilderVer1.getGroupsFloorModel().getGroupFromID(groupId);
if (group != null) {
String groupName = group.getName();
ToolTipTreeNode groupNode = getGroupNode(groupName);
if (groupNode != null) {
// Selecting Floor.
Enumeration<ToolTipTreeNode> floors = groupNode.depthFirstEnumeration();
while (floors.hasMoreElements()) {
ToolTipTreeNode node = floors.nextElement();
if (node.getId().equals(floorId)) {
TreePath path = new TreePath(node.getPath());
tree.setSelectionPath(path);
}
}
} else {
selectDefaultFloor();
}
}
}
} catch (Exception e) {
selectDefaultFloor();
}
}
在下面的圖像本地主機和希爾帕是服務器node.so當我希爾帕點擊,本地主機服務器節點會崩潰。