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当我希尔帕点击,本地主机服务器节点会崩溃。