目录
一、JTree树的常用方法
常用set方法:
//设置树模型 tree.setModel(); //使用根节点给树设置模型 tree.setModel(new DefaultTreeModel(root)); //设置树是否可编辑 tree.setEditable(); //设置根节点的树柄是否可见 tree.setShowsRootHandles(); //设置根节点是否可见 tree.setRootVisible(); //设置指定路径为选中 tree.setSelectionPath(TreePath path); //设置多个指定路径为选中 tree.setSelectionRows(TreePath[] paths); //设置指定行为选中 tree.setSelectionRow(int row); //设置指定多行为选中 tree.setSelectionRows(int[] rows); //给树设置渲染器(可通过渲染器给节点设置图标和节点名称) tree.setCellRenderer(TreeCellRenderer x);
常用get方法:
//获取选中节点的路径 tree.getSelectionPath(); //获取指定坐标对应节点的路径 tree.getPathForLocation(int x, int y); //获取指定行的路径 tree.getPathForRow(int row); //获取指定坐标对应的行 tree.getRowForLocation(int x, int y); //获取指定坐标对应的节点路径 tree.getPathForLocation(int x, int y); //获取指定行的大小和坐标 tree.getRowBounds(int row); //获取指定路径的节点大小和坐标 tree.getPathBounds(TreePath path); //获取树的总行数 tree.getRowCount();
树的展开收起操作:
//展开指定行 tree.expandRow(int row); //展开指定路径 tree.expandPath(TreePath path); //收起指定行 tree.collapseRow(int row)); //收起指定路径 tree.collapsePath(TreePath path);
JTree树的事件:
//给树添加展开收起监听事件 tree.addTreeExpansionListener(new TreeExpansionListener() { @Override public void treeExpanded(TreeExpansionEvent event) { //展开动作 } @Override public void treeCollapsed(TreeExpansionEvent event) { //收起动作 } }); //给树添加选中事件 tree.addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { //节点选中动作 } });
树的渲染:
//设置树收起时的树柄图标 UIManager.put("Tree.collapsedIcon", icon); //设置树展开时的树柄图标 UIManager.put("Tree.expandedIcon", icon); //使用默认渲染器渲染树 DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); renderer.setLeafIcon();//给树设置叶子节点图标 renderer.setClosedIcon();//设置树收起时的图标 renderer.setOpenIcon();//设置树展开时的图标 tree.setCellRenderer(renderer);
二、JTree树的创建
//直接通过一个根节点创建一棵树
DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");
JTree tree = new JTree(root);
//通过 setModel 给树设置新的节点
DefaultMutableTreeNode root2 = new DefaultMutableTreeNode("根节点2");
tree.setModel(new DefaultTreeModel(root2));
//一般都会把树放进滚动面板里
//如果时多棵树可以把多棵树放到一个面板里,再将该面板加到滚动面板中
//或者设置树的根节点不可见,将多棵树转换为一棵树的多个节点
JScrollPane pane = new JScrollPane(tree);
三、JTree创建文件树
import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.ExpandVetoException;
import java.awt.*;
import java.io.File;
public class Main {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setSize(600,600);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setLocationRelativeTo(null);
FileTree tree = createTree("F:\\blog");
JScrollPane pane = new JScrollPane(tree);
jf.setContentPane(pane);
jf.setVisible(true);
}
//传入根文件路径,返回一颗文件树
public static FileTree createTree(String rootPath) {
//设置节点收起时的图标
UIManager.put("Tree.collapsedIcon", new ImageIcon("src/main/resources/right.png"));
//设置节点展开时的图标
UIManager.put("Tree.expandedIcon", new ImageIcon("src/main/resour