expandRow(int row)
expandPath
行不行?我也不知道,没用过

解决方案 »

  1.   

    等等,我有个例子实现的差不多是你的功能,你看看吧
    // Java core packages
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;// Java extension packages
    import javax.swing.*;
    import javax.swing.tree.*;public class PhilosophersJTree extends JFrame {
       
       private JTree tree;
       private DefaultTreeModel philosophers;
       private DefaultMutableTreeNode rootNode;
       
       // PhilosophersJTree constructor
       public PhilosophersJTree() 
       {
          super( "Favorite Philosophers" );
          
          // get tree of philosopher DefaultMutableTreeNodes
          DefaultMutableTreeNode philosophersNode =
             getPhilosopherTree();
          
          // create philosophers DefaultTreeModel 
          philosophers = new DefaultTreeModel( philosophersNode );
          
          // create JTree for philosophers DefaultTreeModel
          tree = new JTree( philosophers );
          
          // create JButton for adding philosophers
          JButton addButton = new JButton( "Add Philosopher" ); 
          addButton.addActionListener(
             new ActionListener() {
                
                public void actionPerformed( ActionEvent event ) 
                {
                   addPhilosopher();
                }
             }
          );
          
          // create JButton for removing selected philosopher
          JButton removeButton = 
             new JButton( "Remove Selected Philosopher" );
          
          removeButton.addActionListener(
             new ActionListener() {
                
                public void actionPerformed( ActionEvent event ) 
                {               
                   removeSelectedPhilosopher();
                }
             }
          );      
          
          // lay out GUI components
          JPanel inputPanel = new JPanel();
          inputPanel.add( addButton );
          inputPanel.add( removeButton );
          
          Container container = getContentPane();   
          
          container.add( new JScrollPane( tree ), 
             BorderLayout.CENTER );
          
          container.add( inputPanel, BorderLayout.NORTH );
          
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setSize( 400, 300 );
          setVisible( true );
          
       } // end PhilosophersJTree constructor
       
       // add new philosopher to selected era
       private void addPhilosopher()
       {
          // get selected era
          DefaultMutableTreeNode parent = getSelectedNode();      // ensure user selected era first
          if ( parent == null ) {
             JOptionPane.showMessageDialog( 
                PhilosophersJTree.this, "Select an era.", 
                "Error", JOptionPane.ERROR_MESSAGE );         return;
          }
          
          // prompt user for philosopher's name
          String name = JOptionPane.showInputDialog(
             PhilosophersJTree.this, "Enter Name:" );      // add new philosopher to selected era
          philosophers.insertNodeInto( 
             new DefaultMutableTreeNode( name ), 
             parent, parent.getChildCount() );
           
       } // end method addPhilosopher
       
       // remove currently selected philosopher
       private void removeSelectedPhilosopher()
       {
          // get selected node
          DefaultMutableTreeNode selectedNode = getSelectedNode();
          
          // remove selectedNode from model
          if ( selectedNode != null )      
             philosophers.removeNodeFromParent( selectedNode );
       }
       
       // get currently selected node
       private DefaultMutableTreeNode getSelectedNode()
       {
          // get selected DefaultMutableTreeNode
          return ( DefaultMutableTreeNode ) 
             tree.getLastSelectedPathComponent();      
       }
       
       // get tree of philosopher DefaultMutableTreeNodes
       private DefaultMutableTreeNode getPhilosopherTree()
       {
          // create rootNode
          DefaultMutableTreeNode rootNode = 
             new DefaultMutableTreeNode( "Philosophers" );  
          
          // Ancient philosophers
          DefaultMutableTreeNode ancient = 
             new DefaultMutableTreeNode( "Ancient" );
          rootNode.add( ancient );
              
          ancient.add( new DefaultMutableTreeNode( "Socrates" ) );
          ancient.add( new DefaultMutableTreeNode( "Plato" ) );
          ancient.add( new DefaultMutableTreeNode( "Aristotle" ) );
          
          // Medieval philosophers
          DefaultMutableTreeNode medieval = 
             new DefaultMutableTreeNode( "Medieval" );
          rootNode.add( medieval );      medieval.add( new DefaultMutableTreeNode( 
             "St. Thomas Aquinas" ) );
          
          // Renaissance philosophers
          DefaultMutableTreeNode renaissance = 
             new DefaultMutableTreeNode( "Renaissance" );
          rootNode.add( renaissance );
          
          renaissance.add( new DefaultMutableTreeNode( 
             "Thomas More" ) );      // Early Modern philosophers
          DefaultMutableTreeNode earlyModern = 
             new DefaultMutableTreeNode( "Early Modern" );
          rootNode.add( earlyModern );      earlyModern.add( new DefaultMutableTreeNode( 
             "John Locke" ) );      // Enlightenment Philosophers
          DefaultMutableTreeNode enlightenment = 
             new DefaultMutableTreeNode( "Enlightenment" );
          rootNode.add( enlightenment );            enlightenment.add( new DefaultMutableTreeNode( 
             "Immanuel Kant" ) );
          
          // 19th Century Philosophers
          DefaultMutableTreeNode nineteenth = 
             new DefaultMutableTreeNode( "19th Century" );
          rootNode.add( nineteenth );                  nineteenth.add( new DefaultMutableTreeNode( 
             "Soren Kierkegaard" ) );            nineteenth.add( new DefaultMutableTreeNode( 
             "Friedrich Nietzsche" ) );      // 20th Century Philosophers
          DefaultMutableTreeNode twentieth = 
             new DefaultMutableTreeNode( "20th Century" );
          rootNode.add( twentieth );                        twentieth.add( new DefaultMutableTreeNode( 
             "Hannah Arendt" ) );   
          
          return rootNode;
          
       } // end method getPhilosopherTree
       
       // execute application
       public static void main( String args[] ) 
       {
          new PhilosophersJTree();
       }
    }
      

  2.   

    展开指定节点public void expandTreeNode(JTree aTree, DefaultMutableTreeNode aNode) {
        if (aNode.isLeaf()) {
          return;
        }
        aTree.expandPath(new TreePath( ( (DefaultMutableTreeNode) aNode).getPath()));
        int n = aNode.getChildCount();
        for (int i = 0; i < n; i++) {
          expandTreeNode(aTree, (DefaultMutableTreeNode) aNode.getChildAt(i));
        }
      }
      

  3.   

    折叠指定节点及其所有子节点
    public void collapseTreeNode(JTree aTree, DefaultMutableTreeNode aNode) {
        if (aNode.isLeaf()) {
          return;
        }
        aTree.collapsePath(new TreePath( ( (DefaultMutableTreeNode) aNode).getPath()));
        int n = aNode.getChildCount();
        for (int i = 0; i < n; i++) {
          collapseTreeNode(aTree, (DefaultMutableTreeNode) aNode.getChildAt(i));
        }
      }
      

  4.   

    看看
    http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
    会对你有帮助的
      

  5.   

    怎么通过右键菜单重命名一个节点,是该节点处在编辑状态,象WINDOWS中的重命名一样,TreeUI是什么东西,哪位可以解答,非常感谢!
    还有怎么更改不同层次的节点图标?
    怎么给一个节点重命名?
    =======================================
    还有这几个问题!!
    谢谢点烟看贴;请等分
    ai92(抵制日货!!) 的程序我已经实现。谢谢,也有份!
      

  6.   

    对节点重命名可以调用JTree.setEditable(true);
    然后就可以直接在树上进行编辑
    右键改变的方法俺还真不知道
    改变图标的问题,看看上面那个网页中的treeIconDemo2吧
    要根据你的需要自定义TreeCellRender
    :))))))
      

  7.   

    如何用右键打开菜单还不知道
    但是如何你有这个值,就可以用
    JTree.getModel().valueForPathChanged(JTree.getSelectionPath(),newValue);
    这个newValue是个Object类型,具体类型视你的树的节点存储数据而定
      

  8.   

    TreeUI是什么东西,哪位可以解答,非常感谢!
    还有怎么更改不同层次的节点图标?
    我试过用TreeCellRender
    但是太难看了;
    怎么设置节点的选择状态,反色;
    右键设置StartEditing(path);
    不是TreeModel就是Tree有这个属性
    还有用一个函数全部展开全部折叠已实现
    用树的编历
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    这个问题一解决马上结贴
      

  9.   

    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    这个问题一解决马上结贴
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    这个问题一解决马上结贴
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    这个问题一解决马上结贴
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    这个问题一解决马上结贴
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    TreeUI是什么东西TreeUI是什么东西TreeUI是什么东西
    这个问题一解决马上结贴