demojtree.java

来自「精通NetBeans光盘源代码,很好很好的资料」· Java 代码 · 共 347 行

JAVA
347
字号
/*
 * DemoJTree.java
 *
 * Created on 2006年4月2日, 下午1:17
 */

package org.netbeans.swing.tree;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

/**
 *
 * @author  boyingking
 */
public class DemoJTree extends javax.swing.JFrame {
    
    /**
     * Creates new form DemoJTree
     */
    public DemoJTree() {
        initComponents();
        initialTree();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jPopupMenuNode = new javax.swing.JPopupMenu();
        jMenuItemAddNode = new javax.swing.JMenuItem();
        jMenuItemDeleteNode = new javax.swing.JMenuItem();
        jMenuItemChangeOpenIcon = new javax.swing.JMenuItem();
        jMenuItemChangeCloseIcon = new javax.swing.JMenuItem();
        jMenuItemLeafIcon = new javax.swing.JMenuItem();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTreeCountry = new javax.swing.JTree();
        jLabelMessage = new javax.swing.JLabel();

        jMenuItemAddNode.setText("\u6dfb\u52a0\u8282\u70b9");
        jMenuItemAddNode.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemAddNodeActionPerformed(evt);
            }
        });

        jPopupMenuNode.add(jMenuItemAddNode);

        jMenuItemDeleteNode.setText("\u5220\u9664\u8282\u70b9");
        jMenuItemDeleteNode.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemDeleteNodeActionPerformed(evt);
            }
        });

        jPopupMenuNode.add(jMenuItemDeleteNode);

        jMenuItemChangeOpenIcon.setText("\u66f4\u6539\u5c55\u5f00\u8282\u70b9\u56fe\u6807");
        jMenuItemChangeOpenIcon.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemChangeOpenIconActionPerformed(evt);
            }
        });

        jPopupMenuNode.add(jMenuItemChangeOpenIcon);

        jMenuItemChangeCloseIcon.setText("\u66f4\u6539\u6298\u53e0\u8282\u70b9\u56fe\u6807");
        jMenuItemChangeCloseIcon.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemChangeCloseIconActionPerformed(evt);
            }
        });

        jPopupMenuNode.add(jMenuItemChangeCloseIcon);

        jMenuItemLeafIcon.setText("\u66f4\u6539\u53f6\u8282\u70b9\u56fe\u6807");
        jMenuItemLeafIcon.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemLeafIconActionPerformed(evt);
            }
        });

        jPopupMenuNode.add(jMenuItemLeafIcon);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("JTree\u7efc\u5408\u5e94\u7528");
        jTreeCountry.setToolTipText("");
        jTreeCountry.setModel(this.initialTreeModel());
        jScrollPane2.setViewportView(jTreeCountry);

        jLabelMessage.setBackground(new java.awt.Color(0, 0, 0));
        jLabelMessage.setText("\u60a8\u8fd8\u6ca1\u6709\u4f5c\u51fa\u4efb\u4f55\u52a8\u4f5c");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(10, 10, 10)
                .add(jLabelMessage, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE))
            .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 263, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jLabelMessage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jMenuItemLeafIconActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemLeafIconActionPerformed
// TODO add your handling code here:
        this.dealTheChangeIconEvent(evt);
    }//GEN-LAST:event_jMenuItemLeafIconActionPerformed

    private void jMenuItemChangeCloseIconActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemChangeCloseIconActionPerformed
// TODO add your handling code here:
        this.dealTheChangeIconEvent(evt);
    }//GEN-LAST:event_jMenuItemChangeCloseIconActionPerformed

    private void jMenuItemChangeOpenIconActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemChangeOpenIconActionPerformed
// TODO add your handling code here:
        this.dealTheChangeIconEvent(evt);
    }//GEN-LAST:event_jMenuItemChangeOpenIconActionPerformed

    private void jMenuItemDeleteNodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeleteNodeActionPerformed
// TODO add your handling code here:
        int confirm=JOptionPane.showConfirmDialog(this,"你确定要删除该节点吗?","提示:",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
        if(confirm==JOptionPane.YES_OPTION)
        {
            DefaultMutableTreeNode parent=(DefaultMutableTreeNode)this.actionNode.getParent(); 
            if(actionNode!=null)
            {                
                if(parent==null)
                {
                    JOptionPane.showMessageDialog(this,actionNode+"是根节点,不能删除!","警告",JOptionPane.WARNING_MESSAGE);
                }
                else
                {
                    this.jLabelMessage.setText(actionNode+"被删除了!");
                    parent.remove(this.actionNode);
                    this.actionNode=null;
                    ((DefaultTreeModel)this.jTreeCountry.getModel()).reload(parent);                
                }                
            }
        }
    }//GEN-LAST:event_jMenuItemDeleteNodeActionPerformed

    private void jMenuItemAddNodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemAddNodeActionPerformed
// TODO add your handling code here:
        String nodeName=JOptionPane.showInputDialog(this,"请输入要添加的节点的名称","请输入:",JOptionPane.INFORMATION_MESSAGE);
        if(nodeName!=null&&!nodeName.equals(""))
        {
             if(this.actionNode!=null)
            {
                 DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(nodeName);
                 actionNode.add(newNode);
                 ((DefaultTreeModel)this.jTreeCountry.getModel()).reload(actionNode);         
                 this.jTreeCountry.setRootVisible(true);
                 this.jTreeCountry.setExpandsSelectedPaths(true);
                 this.jLabelMessage.setText(newNode+"被添加");
            }           
        } 
    }//GEN-LAST:event_jMenuItemAddNodeActionPerformed

    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
                java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DemoJTree().setVisible(true);
            }
        });
         }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabelMessage;
    private javax.swing.JMenuItem jMenuItemAddNode;
    private javax.swing.JMenuItem jMenuItemChangeCloseIcon;
    private javax.swing.JMenuItem jMenuItemChangeOpenIcon;
    private javax.swing.JMenuItem jMenuItemDeleteNode;
    private javax.swing.JMenuItem jMenuItemLeafIcon;
    private javax.swing.JPopupMenu jPopupMenuNode;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTree jTreeCountry;
    // End of variables declaration//GEN-END:variables
   private void initialTree()
    {
         this.jTreeCountry.setEditable(true);
        this.jTreeCountry.setShowsRootHandles(true);//设置树的根节点具有“门把手图标”
        DealAction dealAction=new DealAction();
        this.jTreeCountry.addTreeSelectionListener(dealAction);
        this.jTreeCountry.addTreeExpansionListener(dealAction);
        this.jTreeCountry.addMouseListener(new PopupAdapter(this.jPopupMenuNode));
    }
    private void dealTheChangeIconEvent(ActionEvent evt)
    {
        ImageIcon newIcon=this.chooserIcon();
        DefaultTreeCellRenderer renderer=(DefaultTreeCellRenderer)this.jTreeCountry.getCellRenderer();
        if(evt.getSource()==jMenuItemChangeOpenIcon)
        {
             renderer.setOpenIcon(newIcon);
        }
        else if(evt.getSource()==jMenuItemChangeCloseIcon)
        {
            renderer.setClosedIcon(newIcon);
        }
        else if(evt.getSource()==jMenuItemLeafIcon)
        {
            renderer.setLeafIcon(newIcon);
        }
        this.jTreeCountry.setCellRenderer(renderer);
        ((DefaultTreeModel)this.jTreeCountry.getModel()).reload();        
    }
    private ImageIcon chooserIcon( )
    {
       ImageIcon tempIcon=null; 
       fileChooser.showOpenDialog(this);
       File iconFile=fileChooser.getSelectedFile();
       if(iconFile!=null)
       {
           ImageIcon newIcon=new ImageIcon(iconFile.getPath());
           tempIcon=newIcon;
       }
       return tempIcon;
    }
    private DefaultMutableTreeNode actionNode=null;
    private JFileChooser fileChooser=new JFileChooser();
    private DefaultTreeModel initialTreeModel()
    {           
        DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
	DefaultMutableTreeNode subRoot1=new DefaultMutableTreeNode("北京");
	DefaultMutableTreeNode subRoot2=new DefaultMutableTreeNode("上海");
        DefaultMutableTreeNode subRoot3=new DefaultMutableTreeNode("河北");
        DefaultMutableTreeNode subRoot4=new DefaultMutableTreeNode("河南");
        DefaultMutableTreeNode subRoot5=new DefaultMutableTreeNode("广东");
        DefaultMutableTreeNode subRoot6=new DefaultMutableTreeNode("辽宁");
        DefaultMutableTreeNode leaf1=new DefaultMutableTreeNode("唐山");
        DefaultMutableTreeNode leaf2=new DefaultMutableTreeNode("廊坊");
        DefaultMutableTreeNode leaf3=new DefaultMutableTreeNode("郑州");
        DefaultMutableTreeNode leaf4=new DefaultMutableTreeNode("洛阳");
        DefaultMutableTreeNode leaf5=new DefaultMutableTreeNode("广州");
        DefaultMutableTreeNode leaf6=new DefaultMutableTreeNode("佛山");
        DefaultMutableTreeNode leaf7=new DefaultMutableTreeNode("大连");
        DefaultMutableTreeNode leaf8=new DefaultMutableTreeNode("沈阳");
        root.add(subRoot1);
        root.add(subRoot2);
        root.add(subRoot3);
        root.add(subRoot4);
        root.add(subRoot5);
        root.add(subRoot6);
        subRoot3.add(leaf1);
        subRoot3.add(leaf2);
        subRoot4.add(leaf3);
        subRoot4.add(leaf4);
        subRoot5.add(leaf5);
        subRoot5.add(leaf6);
        subRoot6.add(leaf7);
        subRoot6.add(leaf8);
        DefaultTreeModel myDefaultTreeModel=new DefaultTreeModel(root);
        myDefaultTreeModel.addTreeModelListener(new DealAction());
        return myDefaultTreeModel;
    }
      class PopupAdapter extends MouseAdapter {
        JPopupMenu popup;
        PopupAdapter(JPopupMenu popupMenu) {
            popup = popupMenu;
        }
        public void mousePressed(MouseEvent e) {
            showPopupMenu(e);
        }
        public void mouseReleased(MouseEvent e) {
            showPopupMenu(e);
        }
        private void showPopupMenu(MouseEvent e) {
            if (e.isPopupTrigger()) {
                popup.show(e.getComponent(),e.getX(), e.getY());
            }
        }
    } 
class DealAction implements TreeSelectionListener,TreeExpansionListener,TreeModelListener {
    public void valueChanged(TreeSelectionEvent event1) {
        TreePath tp=event1.getNewLeadSelectionPath();
        if(tp!=null)
        {
             DefaultMutableTreeNode tempNode=(DefaultMutableTreeNode)tp.getLastPathComponent();
             DemoJTree.this.jLabelMessage.setText("你选择了:"+ tempNode);
             DemoJTree.this.actionNode= tempNode;

        }
    }

    public void treeExpanded(TreeExpansionEvent event2) {
        TreePath tp=event2.getPath();
	DemoJTree.this.jLabelMessage.setText("你展开了:"+tp.getLastPathComponent()+"节点");
    }

    public void treeCollapsed(TreeExpansionEvent event3) {
        TreePath tp=event3.getPath();
	DemoJTree.this.jLabelMessage.setText("你将"+tp.getLastPathComponent()+"节点折叠");     
    }

        public void treeNodesChanged(TreeModelEvent e) {
        DemoJTree.this.jLabelMessage.setText("你更改了节点的内容");    
        }

        public void treeNodesInserted(TreeModelEvent e) {}

        public void treeNodesRemoved(TreeModelEvent e) {}

        public void treeStructureChanged(TreeModelEvent e) {}
}//end DemoJTree
}







 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?