1
package com.wanju.chat.test.tree;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class ExampleFrame_01 extends JFrame {
public static void main(String args[]) {
ExampleFrame_01 frame = new ExampleFrame_01();
frame.setVisible(true);
}
public ExampleFrame_01() {
super();
setTitle("简单的树");
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");// 创建根节点
DefaultMutableTreeNode nodeFirst = new DefaultMutableTreeNode("一级子节点A");// 创建一级节点
root.add(nodeFirst);// 将一级节点添加到根节点
DefaultMutableTreeNode nodeSecond = new DefaultMutableTreeNode("二级子节点",
false);// 创建不允许有子节点的二级节点
nodeFirst.add(nodeSecond);// 将二级节点添加到一级节点
root.add(new DefaultMutableTreeNode("一级子节点B"));// 创建一级节点
JTree treeRoot = new JTree(root);// 利用根节点直接创建树
getContentPane().add(treeRoot, BorderLayout.WEST);
DefaultTreeModel treeModelDefault = new DefaultTreeModel(root);// 利用根节点创建树模型,采用默认的判断方式
JTree treeDefault = new JTree(treeModelDefault);// 利用树模型创建树
getContentPane().add(treeDefault, BorderLayout.CENTER);
DefaultTreeModel treeModelPointed = new DefaultTreeModel(root, true);// 利用根节点创建树模型,并采用非默认的判断方式
JTree treePointed = new JTree(treeModelPointed);// 利用树模型创建树
getContentPane().add(treePointed, BorderLayout.EAST);
//
}
}
2
package com.wanju.chat.test.tree;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class ExampleFrame_03 extends JFrame {
private DefaultMutableTreeNode root;
public static void main(String args[]) {
ExampleFrame_03 frame = new ExampleFrame_03();
frame.setVisible(true);
}
public ExampleFrame_03() {
super();
setTitle("遍历树节点");
setBounds(100, 100, 290, 260);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
root = new DefaultMutableTreeNode("ROOT");
DefaultMutableTreeNode nodeFirstA = new DefaultMutableTreeNode("FirstA");
nodeFirstA.add(new DefaultMutableTreeNode("SecondAA"));
nodeFirstA.add(new DefaultMutableTreeNode("SecondAB"));
root.add(nodeFirstA);
DefaultMutableTreeNode nodeFirstB = new DefaultMutableTreeNode("FirstB");
root.add(nodeFirstB);
DefaultMutableTreeNode nodeFirstC = new DefaultMutableTreeNode("FirstC");
nodeFirstC.add(new DefaultMutableTreeNode("SecondCA"));
DefaultMutableTreeNode nedeSecondCB = new DefaultMutableTreeNode(
"SecondCB");
nedeSecondCB.add(new DefaultMutableTreeNode("SecondCBA"));
nedeSecondCB.add(new DefaultMutableTreeNode("SecondCBB"));
nodeFirstC.add(nedeSecondCB);
nodeFirstC.add(new DefaultMutableTreeNode("SecondCC"));
root.add(nodeFirstC);
JTree tree = new JTree(root);
getContentPane().add(tree, BorderLayout.CENTER);
final JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 1));
getContentPane().add(panel, BorderLayout.EAST);
final JButton button = new JButton("按前序遍历节点");
button.addActionListener(new ButtonActionListener("按前序遍历"));
panel.add(button);
final JButton button_1 = new JButton("按后序遍历节点");
button_1.addActionListener(new ButtonActionListener("按后序遍历"));
panel.add(button_1);
final JButton button_2 = new JButton("以广度优先遍历");
button_2.addActionListener(new ButtonActionListener("以广度优先遍历"));
panel.add(button_2);
final JButton button_3 = new JButton("以深度优先遍历");
button_3.addActionListener(new ButtonActionListener("以深度优先遍历"));
panel.add(button_3);
final JButton button_4 = new JButton("遍历直属子节点");
button_4.addActionListener(new ButtonActionListener("遍历子节点"));
panel.add(button_4);
//
}
private class ButtonActionListener implements ActionListener {
private String mode;
public ButtonActionListener(String mode) {
this.mode = mode;
}
public void actionPerformed(ActionEvent e) {
Enumeration enumeration;// 声明节点枚举对象
if (mode.equals("按前序遍历"))
enumeration = root.preorderEnumeration(); // 按前序遍历所有树节点
else if (mode.equals("按后序遍历"))
enumeration = root.postorderEnumeration();// 按后序遍历所有树节点
else if (mode.equals("以广度优先遍历"))
enumeration = root.breadthFirstEnumeration();// 以广度优先遍历所有树节点
else if (mode.equals("以深度优先遍历"))
enumeration = root.depthFirstEnumeration(); // 以深度优先遍历所有树节点
else
enumeration = root.children(); // 遍历该节点的子节点
while (enumeration.hasMoreElements()) {// 遍历节点枚举对象
DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration
.nextElement();// 获得节点
for (int l = 0; l < node.getLevel(); l++) {// 根据节点级别输出占位符
System.out.print("----");
}
System.out.println(node.getUserObject());// 输出节点标签
}
System.out.println();
System.out.println();
}
}
}
3
package com.wanju.chat.test.tree;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
public class ExampleFrame_05 extends JFrame {
private JTextField textField;
private DefaultTreeModel treeModel;
private JTree tree;
public static void main(String args[]) {
ExampleFrame_05 frame = new ExampleFrame_05();
frame.setVisible(true);
}
public ExampleFrame_05() {
super();
setTitle("维护企业架构");
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("倾诚爱家");
DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode("经理办公室");
root.add(nodeA);
DefaultMutableTreeNode nodeB = new DefaultMutableTreeNode("人事部");
root.add(nodeB);
DefaultMutableTreeNode nodeC = new DefaultMutableTreeNode("技术部");
root.add(nodeC);
nodeC.add(new DefaultMutableTreeNode("网络维护部"));
nodeC.add(new DefaultMutableTreeNode("应用开发部"));
DefaultMutableTreeNode nodeD = new DefaultMutableTreeNode("服务部");
root.add(nodeD);
nodeD.add(new DefaultMutableTreeNode("网络服务部"));
nodeD.add(new DefaultMutableTreeNode("内勤开发部"));
DefaultMutableTreeNode nodeE = new DefaultMutableTreeNode("推广部");
root.add(nodeE);
treeModel = new DefaultTreeModel(root, true);
tree = new JTree(treeModel);
tree.setSelectionPath(new TreePath(root));
scrollPane.setViewportView(tree);
final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.SOUTH);
final JLabel label = new JLabel();
label.setText("名称:");
panel.add(label);
textField = new JTextField();
textField.setColumns(8);
textField.setText("测试");
panel.add(textField);
final JButton addButton = new JButton("添加");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(
textField.getText());// 创建欲添加节点
TreePath selectionPath = tree.getSelectionPath();// 获得选中的父节点路径
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selectionPath
.getLastPathComponent();// 获得选中的父节点
treeModel.insertNodeInto(node, parentNode, parentNode
.getChildCount());// 插入节点到所有子节点之后
TreePath path = selectionPath.pathByAddingChild(node);// 获得新添加节点的路径
if (!tree.isVisible(path))
tree.makeVisible(path);// 如果该节点不可见则令其可见
}
});
panel.add(addButton);
final JButton updButton = new JButton("修改");
updButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath selectionPath = tree.getSelectionPath();// 获得选中的欲修改节点的路径
DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectionPath
.getLastPathComponent();// 获得选中的欲修改节点
node.setUserObject(textField.getText());// 修改节点的用户标签
treeModel.nodeChanged(node);// 通知树模型该节点已经被修改
tree.setSelectionPath(selectionPath);// 选中被修改的节点
}
});
panel.add(updButton);
final JButton delButton = new JButton("删除");
delButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();// 获得选中的欲删除节点
if (!node.isRoot()) {// 查看欲删除的节点是否为根节点,根节点不允许删除
DefaultMutableTreeNode nextSelectedNode = node
.getNextSibling();// 获得下一个兄弟节点,以备选中
if (nextSelectedNode == null)// 查看是否存在兄弟节点
nextSelectedNode = (DefaultMutableTreeNode) node
.getParent();// 如果不存在则选中其父节点
treeModel.removeNodeFromParent(node);// 删除节点
tree.setSelectionPath(new TreePath(nextSelectedNode
.getPath()));// 选中节点
}
}
});
panel.add(delButton);
//
}
}
5
package com.wanju.chat.test.tree;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.tree.DefaultMutableTreeNode;
public class Answer_2208 extends JFrame {
/**
* Launch the application
*
* @param args
*/
public static void main(String args[]) {
try {
Answer_2208 frame = new Answer_2208();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public Answer_2208() {
super();
setTitle("支持树状结构的下拉菜单");
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("明日科技");
DefaultMutableTreeNode aNode2 = new DefaultMutableTreeNode("人事部");
root.add(aNode2);
DefaultMutableTreeNode bNode2 = new DefaultMutableTreeNode("开发部");
root.add(bNode2);
DefaultMutableTreeNode aNode3 = new DefaultMutableTreeNode("VB");
bNode2.add(aNode3);
DefaultMutableTreeNode bNode3 = new DefaultMutableTreeNode("VC");
bNode2.add(bNode3);
final JPanel topPanel = new JPanel();
getContentPane().add(topPanel, BorderLayout.NORTH);
final JLabel topLabel = new JLabel();
topLabel.setText("部门:");
topPanel.add(topLabel);
final MTreeComboBox topTreeComboBox = new MTreeComboBox(root, 10, 1.2);
topPanel.add(topTreeComboBox);
final JPanel bottomPanel = new JPanel();
getContentPane().add(bottomPanel, BorderLayout.SOUTH);
final JLabel bottomLabel = new JLabel();
bottomLabel.setText("部门:");
bottomPanel.add(bottomLabel);
final MTreeComboBox bottomTreeComboBox = new MTreeComboBox(root, 20,
1.2);
bottomPanel.add(bottomTreeComboBox);
final JLabel label = new JLabel();
label.setText("");
getContentPane().add(label, BorderLayout.CENTER);
//
}
}