SWING 对树的操作---1

package jtreetest;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import javax.swing.JTree;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.tree.TreePath;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.JOptionPane;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import java.awt.event.MouseAdapter;
import java.awt.Event;
import java.awt.event.MouseEvent;
import java.awt.Toolkit;

public class JTreeSecond extends JFrame {
    JPanel contentPane;
    JScrollPane jScrollPane1 = new JScrollPane();
    JTree jTree1 = null;
    JButton jbtDelete = new JButton();
    JButton jbtExit = new JButton();
    JLabel jblParentName = new JLabel();
    JLabel jblNodeName = new JLabel();
    JLabel jblNodeType = new JLabel();
    JLabel jblChildNumber = new JLabel();
    JTextField txtParentName = new JTextField();
    JTextField txtNodeName = new JTextField();
    JTextField txtNodeType = new JTextField();
    JTextField txtChildNumber = new JTextField();
    DefaultTreeModel treeModel = null;
    JButton jbtInsert = new JButton();

    /**
     * mnuDisplay
     */
    JPopupMenu mnuDisplay = new JPopupMenu();
    /**
     * mnuEditable
     */
    JMenu mnuEditable = new JMenu();
    /**
     * mnuLocked
     */
    JMenuItem mnuLocked = new JMenuItem();
    /**
     * mnuUnLocked
     */
    JMenuItem mnuUnLocked = new JMenuItem();
    /**
     * mnuExit
     */
    JMenuItem mnuExit = new JMenuItem();
    /**
     * mnuDelete
     */
    JMenuItem mnuDelete = new JMenuItem();

    static boolean packFrame = false;


    public JTreeSecond() {
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    /**
     * Component initialization.
     *
     * @throws java.lang.Exception
     */
    private void jbInit() throws Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(null);
        setSize(new Dimension(478, 435));
        setTitle("Frame Title");
        jScrollPane1.setBounds(new Rectangle(10, 9, 165, 318));
        jbtDelete.setBounds(new Rectangle(193, 362, 78, 34));
        jbtDelete.setText("删除");
        jbtDelete.addActionListener(new JTreeSecond_jbtDelete_actionAdapter(this));
        jbtExit.setBounds(new Rectangle(284, 362, 76, 33));
        jbtExit.setText("退出");
        jbtExit.addActionListener(new JTreeSecond_jbtExit_actionAdapter(this));
        jblParentName.setText("父节点名称");
        jblParentName.setBounds(new Rectangle(200, 22, 74, 33));
        jblNodeName.setText("节点名称");
        jblNodeName.setBounds(new Rectangle(200, 82, 73, 32));
        jblNodeType.setText("节点类型");
        jblNodeType.setBounds(new Rectangle(199, 146, 63, 35));
        jblChildNumber.setText("子节点数");
        jblChildNumber.setBounds(new Rectangle(199, 198, 66, 33));
        txtParentName.setBounds(new Rectangle(288, 22, 102, 32));
        txtNodeName.setBounds(new Rectangle(288, 82, 102, 35));
        txtNodeType.setBounds(new Rectangle(288, 146, 102, 40));
        txtChildNumber.setBounds(new Rectangle(288, 208, 102, 39));

        jTree1 = new JTree(getTree());
        treeModel = (DefaultTreeModel) jTree1.getModel();

        jTree1.setEditable(true);
        jTree1.addTreeSelectionListener(new
                                        JTreeSecond_jTree1_treeSelectionAdapter(this));
        jbtInsert.setBounds(new Rectangle(66, 362, 83, 33));
        jbtInsert.setText("增加");
        jbtInsert.addActionListener(new JTreeSecond_jbtInsert_actionAdapter(this));

        jTree1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent event) {
                if (event.getModifiers() == Event.META_MASK) {
                    mnuDisplay.show(contentPane, event.getX(), event.getY());
                }
            }
        });

        contentPane.add(jScrollPane1);
        contentPane.add(jbtExit);
        contentPane.add(jblParentName);
        contentPane.add(jblNodeName);
        contentPane.add(jblNodeType);
        contentPane.add(jblChildNumber);
        contentPane.add(txtParentName);
        contentPane.add(txtNodeName);
        contentPane.add(txtNodeType);
        contentPane.add(txtChildNumber);
        contentPane.add(jbtDelete);
        contentPane.add(jbtInsert);
        contentPane.add(mnuDisplay);
        jScrollPane1.getViewport().add(jTree1);

        mnuEditable.setText("编辑");
        mnuLocked.setText("锁定");
        mnuUnLocked.setText("解锁");
        mnuExit.setText("退出");
        mnuDelete.setText("删除");
        mnuDisplay.add(mnuEditable);
        mnuDisplay.add(mnuDelete);
        mnuDisplay.add(mnuExit);
        mnuEditable.add(mnuLocked);
        mnuEditable.add(mnuUnLocked);

        mnuDelete.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jbtDelete_actionPerformed(e);
            }
        });

        mnuLocked.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                mnuLocked_actionPerformed(e);
            }
        });

        mnuUnLocked.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                mnuUnLocked_actionPerformed(e);
            }
        });

        mnuExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jbtExit_actionPerformed(e);
            }
        });

    }

    public static void main(String[] args) {
        JTreeSecond frame = new JTreeSecond();
        // Validate frames that have preset sizes
        // Pack frames that have useful preferred size info, e.g. from their layout
        if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }

        // Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2,
                          (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);

    }

    private DefaultMutableTreeNode getTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("朋友列表");
        DefaultMutableTreeNode friend = new DefaultMutableTreeNode("我的好友");
        DefaultMutableTreeNode schoolmate = new DefaultMutableTreeNode("同学");
        DefaultMutableTreeNode stranger = new DefaultMutableTreeNode("陌生人");
        DefaultMutableTreeNode blacklist = new DefaultMutableTreeNode("黑名单");
        DefaultMutableTreeNode friendZhan = new DefaultMutableTreeNode("好友张");
        DefaultMutableTreeNode friendWang = new DefaultMutableTreeNode("好友王");
        DefaultMutableTreeNode friendLi = new DefaultMutableTreeNode("好友李");
        DefaultMutableTreeNode friendZhao = new DefaultMutableTreeNode("好友赵");
        DefaultMutableTreeNode friendSun = new DefaultMutableTreeNode("好友孙");
        DefaultMutableTreeNode schoolmateZhan = new DefaultMutableTreeNode(
                "同学张");
        DefaultMutableTreeNode schoolmateWang = new DefaultMutableTreeNode(
                "同学王");
        DefaultMutableTreeNode schoolmateLi = new DefaultMutableTreeNode("同学李");
        DefaultMutableTreeNode schoolmateZhao = new DefaultMutableTreeNode(
                "同学赵");
        DefaultMutableTreeNode schoolmateSun = new DefaultMutableTreeNode("同学孙");
        DefaultMutableTreeNode strangerZhan = new DefaultMutableTreeNode("陌生人张");
        DefaultMutableTreeNode strangerWang = new DefaultMutableTreeNode("陌生人王");
        DefaultMutableTreeNode strangerLi = new DefaultMutableTreeNode("陌生人李");
        DefaultMutableTreeNode strangerZhao = new DefaultMutableTreeNode("陌生人赵");
        DefaultMutableTreeNode strangerSun = new DefaultMutableTreeNode("陌生人孙");
        DefaultMutableTreeNode blacklistZhan = new DefaultMutableTreeNode(
                "黑名单张");
        DefaultMutableTreeNode blacklistWang = new DefaultMutableTreeNode(
                "黑名单王");
        DefaultMutableTreeNode blacklistLi = new DefaultMutableTreeNode("黑名单李");
        DefaultMutableTreeNode blacklistZhao = new DefaultMutableTreeNode(
                "黑名单赵");
        DefaultMutableTreeNode blacklistSun = new DefaultMutableTreeNode("黑名单孙");

        root.add(friend);
        root.add(schoolmate);
        root.add(stranger);
        root.add(blacklist);

        friend.add(friendZhan);
        friend.add(friendWang);
        friend.add(friendLi);
        friend.add(friendZhao);
        friend.add(friendSun);

        schoolmate.add(schoolmateZhan);
        schoolmate.add(schoolmateWang);
        schoolmate.add(schoolmateLi);
        schoolmate.add(schoolmateZhao);
        schoolmate.add(schoolmateSun);

        stranger.add(strangerZhan);
        stranger.add(strangerWang);
        stranger.add(strangerLi);
        stranger.add(strangerZhao);
        stranger.add(strangerSun);

        blacklist.add(blacklistZhan);
        blacklist.add(blacklistWang);
        blacklist.add(blacklistLi);
        blacklist.add(blacklistZhao);
        blacklist.add(blacklistSun);

        return root;
    }

    public void jTree1_valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode defaultNode = (DefaultMutableTreeNode) jTree1.
                                             getLastSelectedPathComponent();
        String name = "";
        if (defaultNode != null) {
            Object nodeInfo = defaultNode.getUserObject();
            if (defaultNode.isRoot()) {
                txtParentName.setText("");
                txtNodeType.setText(nodeInfo.toString());
                txtNodeName.setText("Root");
                txtChildNumber.setText(String.valueOf(defaultNode.getChildCount()));
            } else {
                name = defaultNode.getParent().toString();
                txtParentName.setText(name);
                txtNodeType.setText(nodeInfo.toString());
                if (defaultNode.isLeaf()) {
                    txtNodeName.setText("Leaf");
                } else {
                    txtNodeName.setText("Parent");
                }
                txtChildNumber.setText(String.valueOf(defaultNode.getChildCount()));
            }
        }

    }

    public void jbtDelete_actionPerformed(ActionEvent e) {
        TreePath treePath = jTree1.getSelectionPath();
        if (treePath != null) {
            DefaultMutableTreeNode defaultTreeNode = (DefaultMutableTreeNode)
                    treePath.getLastPathComponent();
            TreeNode treeNode = (TreeNode) defaultTreeNode.getParent();
            if (treeNode != null) {
                treeModel.removeNodeFromParent(defaultTreeNode);
            }
        } else {
            JOptionPane.showMessageDialog(this, "请选择节点");
        }

    }

    public void jbtInsert_actionPerformed(ActionEvent e) {
        DefaultMutableTreeNode parentNode = null;
        DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点");
        newNode.setAllowsChildren(true);
        TreePath parentPath = jTree1.getSelectionPath();

        //判断是否选择节点
        if (parentPath != null) {
            //取得新节点的父节点
            parentNode = (DefaultMutableTreeNode) (parentPath.
                    getLastPathComponent());
            System.out.println(parentNode.toString());

            //由DefaultTreeModel的insertNodeInto()方法增加新节点
            treeModel.insertNodeInto(newNode, parentNode,
                                     parentNode.getChildCount());

            //tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。若没加这行则加入的新节点
            //会被 包在文件夹中,你必须自行展开文件夹才看得到。
            jTree1.scrollPathToVisible(new TreePath(newNode.getPath()));
        } else {
            JOptionPane.showMessageDialog(this, "请选择节点");
        }
    }

    public void jbtExit_actionPerformed(ActionEvent e) {
        this.dispose();
    }

    /**
     * 设置可以编辑状态
     * @param e ActionEvent
     */
    public void mnuUnLocked_actionPerformed(ActionEvent e) {
        jTree1.setEnabled(true);
    }

    /**
     * 设置不可以编辑状态
     * @param e ActionEvent
     */
    public void mnuLocked_actionPerformed(ActionEvent e) {
        jTree1.setEnabled(false);
    }
}


class JTreeSecond_jbtExit_actionAdapter implements ActionListener {
    private JTreeSecond adaptee;
    JTreeSecond_jbtExit_actionAdapter(JTreeSecond adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jbtExit_actionPerformed(e);
    }
}


class JTreeSecond_jbtInsert_actionAdapter implements ActionListener {
    private JTreeSecond adaptee;
    JTreeSecond_jbtInsert_actionAdapter(JTreeSecond adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jbtInsert_actionPerformed(e);
    }
}


class JTreeSecond_jTree1_treeSelectionAdapter implements TreeSelectionListener {
    private JTreeSecond adaptee;
    JTreeSecond_jTree1_treeSelectionAdapter(JTreeSecond adaptee) {
        this.adaptee = adaptee;
    }

    public void valueChanged(TreeSelectionEvent e) {
        adaptee.jTree1_valueChanged(e);
    }
}


class JTreeSecond_jbtDelete_actionAdapter implements ActionListener {
    private JTreeSecond adaptee;
    JTreeSecond_jbtDelete_actionAdapter(JTreeSecond adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jbtDelete_actionPerformed(e);
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值