import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class tree {
JFrame jFrame=new JFrame();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");
DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");
JTree jTree=new JTree(root);
private void init(){
root.add(r1);
root.add(r2);
r1.add(o1);
r1.add(o2);
r2.add(o4);
r2.add(o5);
jFrame.add(jTree);
jFrame.pack();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
public static void main(String[] args) {
new tree().init();
}
}
getNextSibling():返回当前结点的下一个兄弟结点
getParent():得到该结点的父亲结点
isLeaf():判断该结点是不是叶子节点
isRoot():判断该结点是不是根节点
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
public class tree1 {
JFrame jFrame=new JFrame();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");
DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");
JTree jTree=new JTree(root);
private void init(){
root.add(r1);
root.add(r2);
r1.add(o1);
r1.add(o2);
r2.add(o4);
r2.add(o5);
//消除结点之间的连线
// jTree.putClientProperty("JTree.lineStyle","None");
//设置只有水平连线
// jTree.putClientProperty("JTree.lineStyle","Horizontal");
//返回当前结点的下一个兄弟结点
DefaultMutableTreeNode nextSibling = r1.getNextSibling();
System.out.println(nextSibling);//江苏
//得到该结点的父亲结点
TreeNode parent = r1.getParent();
System.out.println(parent);//中国
//判断该结点是不是叶子节点
System.out.println(r1.isLeaf());
System.out.println(o1.isLeaf());
System.out.println("---------------------------------------");
//判断该结点是不是根节点
System.out.println(root.isRoot());
System.out.println(r1.isRoot());
jFrame.add(jTree);
jFrame.pack();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
public static void main(String[] args) {
new tree1().init();
}
}
加入四个按钮,使得JTree可以被编辑
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//编辑jtree
public class tree2 {
JFrame jFrame = new JFrame();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1 = new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2 = new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1 = new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2 = new DefaultMutableTreeNode("芜湖");
DefaultMutableTreeNode o4 = new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5 = new DefaultMutableTreeNode("苏州");
JTree jTree = new JTree(root);
//按钮
JButton addSibling = new JButton("添加兄弟结点");
JButton addSonNode = new JButton("添加子结点");
JButton deleteNode = new JButton("删除结点");
JButton editNode = new JButton("编辑当前结点");
JPanel jPanel = new JPanel();
private void init() {
root.add(r1);
root.add(r2);
r1.add(o1);
r1.add(o2);
r2.add(o4);
r2.add(o5);
jFrame.add(jTree);
jFrame.pack();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
//使树可以编辑
jTree.setEditable(true);
DefaultTreeModel selectionModel = (DefaultTreeModel) jTree.getModel();
//添加兄弟结点
addSibling.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//1.得到当前选中的结点---强转类型
DefaultMutableTreeNode lastSelectedPathComponent = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
if (lastSelectedPathComponent == null) {
return;
}
//2.得到选中结点的父结点
if (lastSelectedPathComponent == null) {
return;
}
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) lastSelectedPathComponent.getParent();
//3.创建新结点
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新结点");
//4.通过父结点添加新结点
int index = parent.getIndex(lastSelectedPathComponent);
selectionModel.insertNodeInto(newNode, parent, index);
//5.显示新结点
//得到新结点的路径
TreeNode[] pathToRoot = selectionModel.getPathToRoot(newNode);
TreePath treePath = new TreePath(pathToRoot);
jTree.scrollPathToVisible(treePath);
//6.重绘树
jTree.updateUI();
}
});
//添加子结点
addSonNode.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//1.得到当前选中 的结点
DefaultMutableTreeNode lastSelectedPathComponent = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
//2.新建结点
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新结点");
//3.将新结点添加到当前选中的结点下
lastSelectedPathComponent.add(newNode);
//4.显示新结点
TreeNode[] pathToRoot = selectionModel.getPathToRoot(newNode);
TreePath treePath = new TreePath(pathToRoot);
jTree.scrollPathToVisible(treePath);
//5.重绘树的UI
jTree.updateUI();
}
});
//删除结点
deleteNode.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode lastSelectedPathComponent = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
if (lastSelectedPathComponent != null && lastSelectedPathComponent.getParent() != null) {
lastSelectedPathComponent.removeFromParent();
jTree.updateUI();
}
}
});
//编辑结点
editNode.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//得到选中结点的路径
TreePath selectionPath = jTree.getSelectionPath();
if (selectionPath != null) {
jTree.startEditingAtPath(selectionPath);
}
}
});
jPanel.add(addSibling);
jPanel.add(addSonNode);
jPanel.add(deleteNode);
jPanel.add(editNode);
jFrame.add(jPanel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
new tree2().init();
}
}
通过点击结点,在右边文本域中输出点击内容的路径
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
public class tree3 {
JFrame jFrame=new JFrame();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");
DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");
JTree jTree=new JTree(root);
JTextArea jTextArea=new JTextArea(5,10);
private void init(){
root.add(r1);
root.add(r2);
r1.add(o1);
r1.add(o2);
r2.add(o4);
r2.add(o5);
TreeSelectionModel selectionModel1 = jTree.getSelectionModel();
selectionModel1.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置为单选
selectionModel1.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
TreePath newLeadSelectionPath = e.getNewLeadSelectionPath();
jTextArea.append(newLeadSelectionPath.toString()+"\n");
}
});
jFrame.add(jTree);
jFrame.pack();
jFrame.add(jTextArea, BorderLayout.EAST);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
public static void main(String[] args) {
new tree3().init();
}
}
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;
public class tree4 {
JFrame jFrame=new JFrame();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode r1=new DefaultMutableTreeNode("安徽");
DefaultMutableTreeNode r2=new DefaultMutableTreeNode("江苏");
DefaultMutableTreeNode o1=new DefaultMutableTreeNode("合肥");
DefaultMutableTreeNode o2=new DefaultMutableTreeNode("芜湖");
DefaultMutableTreeNode o4=new DefaultMutableTreeNode("南京");
DefaultMutableTreeNode o5=new DefaultMutableTreeNode("苏州");
JTree jTree=new JTree(root);
private void init(){
root.add(r1);
root.add(r2);
r1.add(o1);
r1.add(o2);
r2.add(o4);
r2.add(o5);
//设置树的样式
DefaultTreeCellRenderer defaultTreeCellRenderer=new DefaultTreeCellRenderer();
//setBackgroundNonSelectioncolor(Color newColor):设置用于非选定节点的背景颜色
defaultTreeCellRenderer.setBackgroundNonSelectionColor(new Color(220,220,220));
//setBackgroundSelectioncolor(Color newColor):设置用于选定节点的背景颜色
defaultTreeCellRenderer.setBackgroundSelectionColor(new Color(140,140,140));
//setBorderSelectionColor:设置选中结点的边框颜色
defaultTreeCellRenderer.setBorderSelectionColor(Color.BLACK);
//setclosedIcon(Icon newIcon):设置处于折叠状态下非叶子节点的图标。
defaultTreeCellRenderer.setClosedIcon(new ImageIcon("D:\\imgs\\ClosedDocument.png"));
// setFont ( Font font) :设置节点文本的字体。
defaultTreeCellRenderer.setFont(new Font("StSong",Font.BOLD,16));
//setOpenIcon(Icon newIcon):设置处于展开状态下非叶子节点的图标。
defaultTreeCellRenderer.setOpenIcon(new ImageIcon("D:\\imgs\\OpenedDocument.png"));
//setLeaflcon( Icon newIcon):设置叶子节点的图标。
defaultTreeCellRenderer.setLeafIcon(new ImageIcon("D:\\imgs\\leaf.png"));
// setTextNonSelectioncolor(Color newColor):设置绘制非选中状态下节点文本的颜色
defaultTreeCellRenderer.setTextNonSelectionColor(new Color(255,0,0));
// setTextselectioncolor(color newColor):设置绘制选中状态下节点文本的颜色
defaultTreeCellRenderer.setTextSelectionColor(new Color(0,0,255));
jFrame.add(jTree);
jFrame.pack();
//设置结点绘制器
jTree.setCellRenderer(defaultTreeCellRenderer);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
public static void main(String[] args) {
new tree4().init();
}
}
被选中的文字变成蓝色,默认为红色