JavaSwing实现树形结构
原文链接:http://blog.csdn.net/syb18810107241/article/details/17166093
一、Applet
package com.jy.applet.day1206; import java.awt.Container; import javax.swing.JApplet;
import javax.swing.SwingUtilities;
import javax.swing.UIManager; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import com.jy.applet.day1206.swing.pane.TestPane; /** * 用来实现树形结构的Applet * * @author Administrator * */
@SuppressWarnings("serial")
public class AppletTest1 extends JApplet { private static final Log log = LogFactory.getLog(AppletTest1.class);// 日志记录 private static AppletTest1 instance; public static Container container;// 一个可包含其他 AWT 组件的组件。 public void init() { log.info("Applet初始化......"); instance = this; SwingUtilities.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager .getSystemLookAndFeelClassName());//设置外观感觉 container = getContentPane();//获取内容面板 TestPane pane = new TestPane();//初始化主面板 container.add(pane);//将主面板添加到内容面板 } catch (Exception e) { e.printStackTrace(); } } }); } public static AppletTest1 getInstance() { return instance; } public void destroy() { log.info("程序正在关闭....."); } }
二、主面板
package com.jy.applet.day1206.swing.pane; import java.util.List; import javax.swing.JScrollPane;
import javax.swing.JTree; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import com.jy.applet.day1206.swing.tree.JTreeNode;
import com.jy.applet.util.DataTestDao; @SuppressWarnings({"serial","unchecked"})
public class TestPane extends JScrollPane{ private static final Log log = LogFactory.getLog(TestPane.class); private static TestPane instance;//实例变量 public JTree myTree;//面板中的树 JTreeNode rootNode ;//自定义根节点 public TestPane(){ instance = this; init(); } private void init() { log.info("开始初始化主面板......"); setAutoscrolls(true); getViewport().removeAll(); rootNode = new JTreeNode("中国"); JTreeNode secondTreeNode = null;//第二层节点 JTreeNode leafTreeNode = null;//叶子节点 List provinceList = DataTestDao.getProvinceList();//省份的集合 String provinceId = null; /**如果省份和城市的集合不为空,并且元素个数大于0**/ if (provinceList != null && provinceList.size() > 0) { for (int i = 0; i < provinceList.size(); i++) { secondTreeNode = (JTreeNode) provinceList.get(i);//获取二层节点 provinceId = secondTreeNode.getId();//获取省份ID List<JTreeNode> cityList = DataTestDao.getCityListByProID(provinceId);//根据省份ID查询城市 if(cityList != null && cityList.size() > 0){ for(int j = 0;j < cityList.size();j ++){ leafTreeNode = cityList.get(j);//获取叶子节点,即城市 secondTreeNode.add(leafTreeNode);//将叶子节点挂到第二层节点上 } } rootNode.add(secondTreeNode);//把第2层节点,添加到根节点 } } myTree = new JTree(rootNode);//以rootNode为根节点,创建一个树形结构 myTree.putClientProperty("JTree.lineStyle", "Horizontal");//树形结构的线条风格 myTree.setVisible(true); myTree.updateUI(); instance.setViewportView(myTree); /**注册事件**/ MyTreeAdapter treeAdapter = new MyTreeAdapter(); myTree.addTreeSelectionListener(treeAdapter); } public static TestPane getInstance() { return instance; }
}
三、用来模拟数据库的DAO
package com.jy.applet.util; import java.util.ArrayList;
import java.util.List; import com.jy.applet.day1206.swing.tree.JTreeNode;
import com.jy.applet.entity.City; /** * 用户模拟数据的DAO * @author Administrator * */
@SuppressWarnings("unchecked")
public class DataTestDao { public static List getProvinceList() { List<String> provinces = new ArrayList<String>(); provinces.add("北京市"); provinces.add("天津市"); provinces.add("上海市"); provinces.add("重庆市"); provinces.add("山东省"); provinces.add("江苏省"); provinces.add("浙江省"); provinces.add("广东省"); List<JTreeNode> returnList = new ArrayList<JTreeNode>(); JTreeNode treeNode = null; for(int i=0;i < provinces.size();i++){ treeNode = new JTreeNode(provinces.get(i)); treeNode.setId(i+""); returnList.add(treeNode); } return returnList; } public static List<JTreeNode> getCityListByProID(String provinceId) { List<City> citys = new ArrayList<City>(); List<JTreeNode> returnList = new ArrayList<JTreeNode>(); JTreeNode treeNode = null; if(provinceId.equals("0")){ //北京市 citys.add(new City(provinceId,"海淀区")); citys.add(new City(provinceId,"东城区")); citys.add(new City(provinceId,"西城区")); }else if(provinceId.equals("1")){ //天津市 citys.add(new City(provinceId,"河东区")); citys.add(new City(provinceId,"河西区")); citys.add(new City(provinceId,"塘沽区")); }else if(provinceId.equals("2")){ //上海市 citys.add(new City(provinceId,"浦东新区")); citys.add(new City(provinceId,"黄浦区")); citys.add(new City(provinceId,"宝山区")); }else if(provinceId.equals("3")){ //重庆市 citys.add(new City(provinceId,"渝北区")); citys.add(new City(provinceId,"巫山县")); citys.add(new City(provinceId,"涪陵区")); }else if(provinceId.equals("4")){ //山东省 citys.add(new City(provinceId,"济南市")); citys.add(new City(provinceId,"青岛市")); citys.add(new City(provinceId,"烟台市")); citys.add(new City(provinceId,"潍坊市")); citys.add(new City(provinceId,"日照市")); citys.add(new City(provinceId,"聊城市")); }else if(provinceId.equals("5")){ //江苏省 citys.add(new City(provinceId,"南京市")); citys.add(new City(provinceId,"徐州市")); citys.add(new City(provinceId,"苏州市")); citys.add(new City(provinceId,"无锡市")); citys.add(new City(provinceId,"镇江市")); citys.add(new City(provinceId,"扬州市")); }else if(provinceId.equals("6")){ //浙江省 citys.add(new City(provinceId,"杭州市")); citys.add(new City(provinceId,"温州市")); citys.add(new City(provinceId,"宁波市")); citys.add(new City(provinceId,"绍兴市")); citys.add(new City(provinceId,"金华市")); citys.add(new City(provinceId,"衢州市")); }else if(provinceId.equals("7")){ //广东省 citys.add(new City(provinceId,"广州市")); citys.add(new City(provinceId,"深圳市")); citys.add(new City(provinceId,"珠海市")); citys.add(new City(provinceId,"东莞市")); citys.add(new City(provinceId,"惠州市")); citys.add(new City(provinceId,"肇庆市")); }else{ } for(int i=0;i < citys.size();i++){ treeNode = new JTreeNode(citys.get(i).getName()); treeNode.setId(i+""); returnList.add(treeNode); } return returnList; } }
四、监听器
package com.jy.applet.day1206.swing.adapter; import javax.swing.JOptionPane;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath; import com.jy.applet.day1206.swing.tree.JTreeNode; public class MyTreeAdapter implements TreeSelectionListener { @Override public void valueChanged(TreeSelectionEvent e) { TreePath treePath = e.getNewLeadSelectionPath();// 例如[中国, 江苏省, 南京市] if (treePath != null) { // 返回路径上最底层的组件,对于树形结构,即叶子节点 // this will return an instance of TreeNode. JTreeNode node = (JTreeNode) treePath.getLastPathComponent(); StringBuilder sb = new StringBuilder(); sb.append("您选择的是:"); sb.append(node); sb.append("\r\n"); sb.append("路径为:"); sb.append(treePath); JOptionPane.showMessageDialog(null, sb, "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "您尚未选择省份或城市!", "错误", JOptionPane.ERROR_MESSAGE); } } }
五、【效果如下】
JavaSwing实现树形结构相关推荐
- 树形结构在关系数据库中的设计
在程序设计中,经常以树形结构表示数据的层次关系,如菜单的结构.商品的分类等. 这样的层次结构在关系数据库中难以直观地表示.常见的一种做法是用一个字段指向上级节点来表示记录的上下级关系. fid pid ...
- html树状结构怎么展开,纯css实现树形结构
纯css实现属性结构 **css实现属性结构的思路是利用伪类实现树形结构连接线,如果想实现点击展开和收 缩以及复选框效果还得配合js来实现.其实展开和收缩就是一个点击元素其子元素隐藏 和显示的切换.* ...
- 使用树形结构保存实体
阅读原文请访问我的博客BrightLoong's Blog 之前在项目需要实现一个功能--将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中:由于xml结构的数据是结构化的数据, ...
- 在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)
最近一个项目要用到从listview向treeview拖动item,达到从外部拖动图标成为树形结构的一部分,通过查阅资料总结了一些实现方式,分享给大家.这是winform中的例子. 在进行拖放操作之前 ...
- Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...
- 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...
- 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件
看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...
- vue树形结构html,怎么在vue中利用递归组件实现一个树形控件
怎么在vue中利用递归组件实现一个树形控件 发布时间:2021-06-11 17:26:48 来源:亿速云 阅读:81 作者:Leah 本篇文章为大家展示了怎么在vue中利用递归组件实现一个树形控件, ...
- 使用hibernate实现树形结构无限级分类
转自 http://together.javaeye.com/blog/29482?page=2 在系统中,经常会用到无限级的树形结构分类,如组织机构管理.商品/地区分类等等.在以前的一个贴子:htt ...
最新文章
- JUC并发编程九 并发架构--循环打印
- (20)FPGA数据接口同步化
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨6.21%
- matlab画图常用函数image、imagesc、imshow区别
- Astah 7.2 安装
- 使用jquery生成随机二维码的方法
- Sql Server 课堂笔记
- dsp 中DATA_SECTION用法
- python word转excel_看Python如何无缝转换Word和Excel
- ubuntu下添加路径到PATH
- 【图像加密】基于混沌系统的图像加密解密matlab源码含GUI
- ChatGPT能接入微信了
- MFC如何修改窗口背景色(转载)
- 韩国计划扩展网络道德课程
- QT-按下按钮实现页面跳转
- 用FPGA加速卷积神经网络的知识储备
- 大话Ceph--CephX 那点事儿
- 西门子PLC与IFIX软件以太网通讯
- 查看QQ是否隐身,轻而易举。 - [工具+源码]
- [pig框架实战] 手撕视频管理发布平台[02] - pig框架源码分析(去除开发过程中每次输入验证码的过程,方便快速登录)