我在CSDN上看到一人发了一段关于Tree的源码,看了一下
发现里面没有关于window的Closing的事件监听
但运行的时候却可以通过关闭按钮关闭
不知何解
小弟初学,请指教import java.awt.*; //
import java.awt.event.*;//import javax.swing.*;//JFC
import javax.swing.event.*;//JFC事件类import javax.swing.tree.DefaultMutableTreeNode;//节点类
import javax.swing.tree.DefaultTreeModel;//模型
import javax.swing.tree.TreePath;//树的路径public class JTreeTest extends JFrame //继承JFrame
{
      DefaultMutableTreeNode rootNode=createNode();//执行createNode()函数,将返回值传给rootNode
      JTree tree = new JTree(rootNode); //创建树
      JTextField textField = new JTextField(10);//创建文本框
      JScrollPane scrollPane=new JScrollPane();//创建滚动条
      JButton button1 = new JButton();
      JButton button2 = new JButton();
      JPanel p=new JPanel();//创建面板
      Container c;//创建容器
      
      public JTreeTest() 
      {
            
            
            c=this.getContentPane();//将JFrame中的所用对象传递给C
            this.setTitle("JTreeTest");
            c.setLayout(new BorderLayout());//BorderLayout,布局管理器
            
            button1.setText("增加");
            button2.setText("删除");
            p.add(textField);
            p.add(button2);
            p.add(button1);
            c.add(p,BorderLayout.NORTH);
            c.add(scrollPane,BorderLayout.CENTER);
        
            scrollPane.getViewport().add(tree);//向滚动面板中加入树
            //scrollPane.add(tree);
            
            //添加TreeSelection事件侦听器
            tree.addTreeSelectionListener(new TreeSelectionListener()
            {
                  //当选择一个节点时,把节点的标题显示到文本框中
                  public void valueChanged(TreeSelectionEvent e)
                  {
                        //获取当前节点的路径
                      TreePath selectionPath = e.getPath();
                      DefaultMutableTreeNode selectedNode;
                      //获取当前节点
                      selectedNode=(DefaultMutableTreeNode)selectionPath.getLastPathComponent();
                      textField.setText(selectedNode.toString());                  
                  }
            });
            
            button1.addActionListener(new ActionListener()
            {
                  public void actionPerformed(ActionEvent e)
                  {
                        //调用函数
                        addNode();
                  }
            });
            
            button2.addActionListener(new ActionListener()
            {
                  public void actionPerformed(ActionEvent e)
                  {
                        //调用函数
                        removeNode();
                  }
            });
      }
      
      public static void main(String args[])
      {
            JTreeTest app=new JTreeTest();
            app.setBounds(new Rectangle(100,100,255,310));
            app.show();
      }
      
      DefaultMutableTreeNode createNode ()
      {
            //创建节点
            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Java");
          DefaultMutableTreeNode books = new DefaultMutableTreeNode("Java书籍");
          DefaultMutableTreeNode tools = new DefaultMutableTreeNode("Java开发工具");
          //添加字节点
          rootNode.add(books);
          rootNode.add(tools);
          
          books.add(new DefaultMutableTreeNode ("Java高级实例编程"));
          books.add(new DefaultMutableTreeNode ("Java编程思想"));
          books.add(new DefaultMutableTreeNode ("Java编程详解"));
          
          tools.add(new DefaultMutableTreeNode ("JBuilder"));
          tools.add(new DefaultMutableTreeNode ("JCreator"));
          tools.add(new DefaultMutableTreeNode ("Visual J++"));
          
          return rootNode;
      }
      //删除节点
    void removeNode()
    { 
          //获取当前节点的路径
            TreePath selectedPath = tree.getSelectionPath();
           
            if (selectedPath!=null)
            {         
                     DefaultMutableTreeNode selectedNode;
                     DefaultTreeModel treeModel;
                     //获取当前节点
                     selectedNode = (DefaultMutableTreeNode)selectedPath.getLastPathComponent();
                treeModel=(DefaultTreeModel)tree.getModel();
                //删除节点
                if(selectedNode.getParent()!=null)
                  treeModel.removeNodeFromParent(selectedNode);
                else
                   JOptionPane.showMessageDialog(this,"根节点不能删除!");
            }
    }
    //向当前选中的节点中添加一个子节点
    void addNode()
    {
          //定义一个节点,创建一个新节点,节点的标题用文本的内容
            DefaultMutableTreeNode newNode;
            newNode = new DefaultMutableTreeNode(textField.getText());
            //获取当前节点的路径
            TreePath selectedPath = tree.getSelectionPath();
           
            if (selectedPath!=null)
            {
                     DefaultMutableTreeNode selectedNode;
                     DefaultTreeModel treeModel;
                     //获取当前节点
                     selectedNode = (DefaultMutableTreeNode)selectedPath.getLastPathComponent();
                     treeModel=(DefaultTreeModel)tree.getModel();
                     //增加节点
                     treeModel.insertNodeInto(newNode,selectedNode,selectedNode.getChildCount());
            }
    }
}