Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在选择和展开另一个节点时自动折叠JTree节点_Java_Swing - Fatal编程技术网

Java 如何在选择和展开另一个节点时自动折叠JTree节点

Java 如何在选择和展开另一个节点时自动折叠JTree节点,java,swing,Java,Swing,我想实现一个需求,在这个需求中,我必须在选择或双击另一个节点时折叠JTree的所有子节点 我有多个服务器的树状视图,当我点击一个服务器节点时,我正在维护它,我选择了哪个服务器(lastSelectedServerName),同时所有其他服务器节点都应该折叠 public void populateGroupsfloorsTree(List<ServerInfo> serversList) { this.clear(); servers = serversList;

我想实现一个需求,在这个需求中,我必须在选择或双击另一个节点时折叠JTree的所有子节点

我有多个服务器的树状视图,当我点击一个服务器节点时,我正在维护它,我选择了哪个服务器(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();
    }
}
public void populateGroupsfloorsTree(列表服务器列表){
这个.clear();
服务器=服务器列表;
用于(服务器信息服务器:服务器){
ToolTipTreeNode serverNode=GROUPS\u FLOOR\u TREE.addServer(服务器);
对于(组:server.getGroupFoor()){
ToolTipTreeNode groupNode=GROUPS\u FLOOR\u TREE.addGroup(服务器节点,组);
对于(GroupFloor:group.getGroupFloors()){
GROUPS\u FLOOR\u TREE.addGroupFloor(groupNode,FLOOR);
}
}
}
String lastSelectedServerName=(String)Main.getInstance().getSettings()
.getValue(AppSettings.Property.LAST_SELECTED_SERVER,默认_SERVER);
字符串lastSelectedGroupId=(字符串)Main.getInstance().getSettings()
.getValue(AppSettings.Property.LAST_SELECTED_GROUP,默认_GROUP);
String lastSelectedFloorId=(String)Main.getInstance().getSettings()
.getValue(AppSettings.Property.LAST_SELECTED_FLOOR,默认_FLOOR);
expandGroupSelectedFloor(lastSelectedServerName、lastSelectedGroupId、lastSelectedFloorId);
}//populateGroupsfloorsTree方法的结尾。
public void expandGroupSelectedFloor(字符串servername、字符串groupId、字符串floorId){
试一试{
if(((默认组).equals(组ID)| |(默认地板).equals(地板))
||(“”).等于(服务器名)| |(“”).等于(组ID)| |(“”).等于(floorId)){
选择DefaultFloor();
}else if(guibuilder1.getGroupsFloorModel().getGroupFromID(groupId)==null
||GUIBuildServer1.getGroupsFloorModel().getGroupFloorFromUUID(
UUID.fromString(floorId))==null){
选择DefaultFloor();
}否则{
Group Group=guibuildserver1.getGroupsFloorModel().getGroupFromID(groupId);
如果(组!=null){
字符串groupName=group.getName();
ToolTipTreeNode groupNode=getGroupNode(groupName);
if(groupNode!=null){
//选择楼层。
枚举层=groupNode.depthFirstEnumeration();
while(floors.hasMoreElements()){
ToolTipTreeNode节点=floors.nextElement();
if(node.getId().equals(floorrid)){
树路径=新树路径(node.getPath());
tree.setSelectionPath(路径);
}
}
}否则{
选择DefaultFloor();
}
}
}
}捕获(例外e){
选择DefaultFloor();
}
}
在下图中,Localhost和shilpa是服务器节点。因此,当我单击shilpa时,Localhost服务器节点将崩溃。

也许您可以使用

import java.awt.*;
import java.util.Enumeration;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class ToggleTreeNodeGroupExample {
  public JComponent makeUI() {
    JTree tree = new JTree();
    tree.setRootVisible(false);
    tree.addTreeWillExpandListener(new TreeWillExpandListener() {
      private boolean isAdjusting;
      @Override
      public void treeWillExpand(TreeExpansionEvent e) throws ExpandVetoException {
        // collapseAll(tree); // StackOverflowError when collapsing nodes below 2nd level
        if (isAdjusting) {
          return;
        }
        isAdjusting = true;
        collapseFirstHierarchy(tree);
        tree.setSelectionPath(e.getPath());
        isAdjusting = false;
      }
      @Override
      public void treeWillCollapse(TreeExpansionEvent e) throws ExpandVetoException {
        //throw new ExpandVetoException(e, "Tree collapse cancelled");
      }
    });
    JPanel p = new JPanel(new BorderLayout());
    p.add(new JScrollPane(tree));
    return p;
  }
  private static void collapseFirstHierarchy(JTree tree) {
    TreeModel model = tree.getModel();
    DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
    Enumeration e = root.breadthFirstEnumeration();
    while (e.hasMoreElements()) {
      DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
      if (node.getLevel() > 1) { // Collapse only nodes in the first hierarchy
        return;
      } else if (node.isLeaf() || node.isRoot()) {
        continue;
      }
      tree.collapsePath(new TreePath(node.getPath()));
    }
  }
//   private static void collapseAll(JTree tree) {
//     int row = tree.getRowCount() - 1;
//     while (row >= 0) { // The root node must be hidden
//       tree.collapseRow(row--);
//     }
//   }
  public static void main(String... args) {
    EventQueue.invokeLater(() -> {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.getContentPane().add(new ToggleTreeNodeGroupExample().makeUI());
      f.setSize(320, 240);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
    });
  }
}