2016-03-06 30 views
0

我创建了JavaTree。现在我想要获取每个类的所有子类和同级类名。我可以使用selectedNode.getParent().toString()参加超级班。但下面的子类的代码给了像[email protected]和兄弟类的结果,我找不到方法。有什么方法可以获取每个子类和兄弟类的名字吗?使用JTree在Java中取出每个子类和同级类名称

import java.awt.BorderLayout; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTree; 
    import javax.swing.SwingUtilities; 
    import javax.swing.event.TreeSelectionEvent; 
    import javax.swing.event.TreeSelectionListener; 
    import javax.swing.tree.DefaultMutableTreeNode; 

    public class TreeExample extends JFrame 
    { 

     /****************** Developing a Simple JTree************************/ 
     private JTree tree; 
     private JLabel selectedLabel; //for Event Handlers 

     public TreeExample() 
     { 
      //create the root node 
      DefaultMutableTreeNode root = new DefaultMutableTreeNode("AA"); 
      //create the child nodes 
      DefaultMutableTreeNode bb = new DefaultMutableTreeNode("BB"); 
      DefaultMutableTreeNode cc = new DefaultMutableTreeNode("CC"); 

      //add the child nodes to the root node 
      root.add(bb); 
      root.add(cc); 

      //create the tree by passing in the root node 
      tree = new JTree(root); 
      add(tree); 

      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      this.setTitle("JTree Example");  
      this.pack(); 
      this.setVisible(true); 


    /****************** Adding More Children************************/  
      videoInfoNode.add(new DefaultMutableTreeNode("DD")); 

      foodInfoNode.add(new DefaultMutableTreeNode("EE")); 
      foodInfoNode.add(new DefaultMutableTreeNode("FF")); 
      foodInfoNode.add(new DefaultMutableTreeNode("GG")); 

    //To get the selected node information  
      tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { 
       @Override 
       public void valueChanged(TreeSelectionEvent e) { 
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); 

        //sub class 
        if(selectedNode.getAllowsChildren()){----?????????? 
        selectedLabel.setText(selectedNode.children().toString());}-----????????? 
        else{ 
        System.out.println("no children"); 
        } 

        //sibling class 
       System.out.println(selectedNode.getSibling().....);--------???????? 
       } 
      }); 

    } //end 

     //main 
     public static void main(String[] args) 
     { 
      SwingUtilities.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
        new TreeExample(); 
       } 
      }); 
     } 
    } 

回答

1

我可以用selectedNode.getParent采取超()。toString()方法。

我猜你的意思是TreeNode

如果(selectedNode.getAllowsChildren()){---- ??????????

也许你需要使用TreeNode#isLeaf()而不是DefaultMutableTreeNode#getAllowsChildren()

import java.awt.BorderLayout; 
import java.util.Enumeration; 
import javax.swing.*; 
import javax.swing.event.TreeSelectionEvent; 
import javax.swing.event.TreeSelectionListener; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.TreeNode; 

public class TreeExample2 extends JFrame { 
    /****************** Developing a Simple JTree************************/ 
    private JTree tree; 
    //private JLabel selectedLabel; //for Event Handlers 

    public TreeExample2() { 
    //create the root node 
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("AA"); 
    //create the child nodes 
    DefaultMutableTreeNode bb = new DefaultMutableTreeNode("BB"); 
    DefaultMutableTreeNode cc = new DefaultMutableTreeNode("CC"); 

    //add the child nodes to the root node 
    root.add(bb); 
    root.add(cc); 

    //create the tree by passing in the root node 
    tree = new JTree(root); 
    add(tree); 

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setTitle("JTree Example"); 
    this.pack(); 
    this.setVisible(true); 


    /****************** Adding More Children************************/ 
    bb.add(new DefaultMutableTreeNode("DD")); 

    cc.add(new DefaultMutableTreeNode("EE")); 
    cc.add(new DefaultMutableTreeNode("FF")); 
    cc.add(new DefaultMutableTreeNode("GG")); 

    //To get the selected node information 
    tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { 
     @Override public void valueChanged(TreeSelectionEvent e) { 
     Object o = tree.getLastSelectedPathComponent(); 
     if (o instanceof DefaultMutableTreeNode) { 
      //TreeNode selectedNode = (TreeNode) o; 
      DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) o; 
      System.out.println("----"); 

      //children 
      if (!selectedNode.isLeaf() && selectedNode.getChildCount() > 0) { 
      Enumeration enumeration = selectedNode.children(); 
      while (enumeration.hasMoreElements()) { 
       TreeNode node = (TreeNode) enumeration.nextElement(); 
       System.out.println("child: " + node); 
      } 
      } else { 
      System.out.println("no children"); 
      } 

      //sibling 
      TreeNode parentNode = selectedNode.getParent(); 
      if (parentNode != null) { 
      for (int i = 0; i < parentNode.getChildCount(); i++) { 
       TreeNode node = parentNode.getChildAt(i); 
       if (!selectedNode.equals(node)) { 
       System.out.println("sibling: " + node); 
       } 
      } 
      } 
     } 
     } 
    }); 
    } 
    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override public void run() { 
     new TreeExample2(); 
     } 
    }); 
    } 
} 
+0

它工作正常。非常感谢您的回复。 – Emalka