package untitled7;
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);
}
}