JTree如何选中一个某个节点?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37355951/article/details/79301990

概述:JTree如何用代码选中一个节点?点击按钮选中某个节点

直接上代码:

import java.awt.FlowLayout;
import java.awt.Toolkit;
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.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class JTreeTest {
	 static DefaultMutableTreeNode first= new DefaultMutableTreeNode("中国");
	 static DefaultTreeModel model = new DefaultTreeModel(first);
	public static void main(String[] args) {
		initTree(); 
		JFrame j = new JFrame();
		j.setLayout(new FlowLayout());
		final JTree tree = new JTree(model);
		j.add(tree);
		JTreeTest.init(j,500,400,"JTreeTest");
		JButton button = new JButton("选中");
		j.add(button);
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				DefaultMutableTreeNode hunan = searchNode ("长沙"); //这写死
				 TreeNode[] nodes = model.getPathToRoot(hunan);  //有节点到根路径数组
	             TreePath path = new TreePath(nodes);
	             System.out.println(path.toString());   //路径
	             tree.setSelectionPath(new TreePath(nodes));
			}
		});
	}
	/**
	 * 初始化树节点
	 */
	public static void initTree(){
	   
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("上海");
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("湖南");
		DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("长沙");
		DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("郴州");
		DefaultMutableTreeNode node5= new DefaultMutableTreeNode("衡阳");
		
		node2.add(node3);
		node2.add(node4);
		node2.add(node5);
		first.add(node1);
		first.add(node2);
	}
	/**
	 * 根据字符串返回对应节点
	 * @param nodeStr
	 * @return
	 */
	private static DefaultMutableTreeNode searchNode(String nodeStr)
    {
      DefaultMutableTreeNode node = null;
      Enumeration e = first.breadthFirstEnumeration();  //获取root下所有节点
      while (e.hasMoreElements())
      { 
        node = (DefaultMutableTreeNode) e.nextElement();            
        if ((node.getUserObject().toString()).contains(nodeStr))
        {
          return node;
        }
      }
      return null;
    }

	/**
	 * 初始化窗口
	 * @param f    窗体对象继承了JFrame
	 * @param width   窗体的宽度
	 * @param height  窗体的高度
	 * @param windowName  窗体名称
	 */
	public static void init(final JFrame f, final int width, final int height, final String windowName){
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				 // 得到显示器屏幕的宽高
			      int widthAll = Toolkit.getDefaultToolkit().getScreenSize().width;
			       int heightAll = Toolkit.getDefaultToolkit().getScreenSize().height;
				f.setTitle(windowName);
				f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				f.setSize(width, height);
				f.setBounds((widthAll - width) / 2,
		                20, width, height);
				f.setVisible(true);
				
			}
		});
	}
	
}

初始化的效果:


点击按钮后:


参考:https://coderanch.com/t/543214/java/Select-node-Jtree

猜你喜欢

转载自blog.csdn.net/m0_37355951/article/details/79301990
今日推荐