树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示
树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示
一、业务原型:公司的组织结构、传销关系网
二、数据库模型
很简单,创建 id 与 pid 关系即可。(pid:parent_id)
三、Java模型
(我们把这张网撒在html的一张表里。其实用ul来展示会简单N多,自己思考为什么LZ会选择放在表里)
private class Table {
private Long id; // 当前对象的id
private int x; // 横坐标
private int y; // 纵坐标
private List<Table> tables; // 当前对象的下级集合
public Table(Long id) {
this.id = id; // 方便快速创建对象
}
}
1、组装Java模型数据
1)一次性从表里查出所有数据
2)创建下面的Map
// pid 与 List<id> 上级ID与下级对象的对应关系
Map<Long, List<Table>> psMap = new HashMap<>(); // 简单,不详细说明了
3)创建顶级节点
用顶级对象的ID new 一个Table,然后根据ID从上面的 psMap 取出它的下级给这个 Table 的 tables。
4)递归完成所有子级节点
循环Table对象的tables集合,重复上面一个步骤即可
5)计算每个Table对象的横(x)纵(y)坐标
这里再创建一个对象
private class Max {
private int x = 1; // 表的行
private int y = 1; // 列
}
// 计算纵坐标
private void countY(List<Table> tables, int y, Max max) {
if (tables != null)
for (Table table : tables) {
table.y = y;
countY(table.tables, y + 1, max);
if (y > max.y)
max.y = y;
}
} // 计算横坐标
private void countX(List<Table> tables, int x, Max max) {
if (tables != null)
for (Table table : tables) {
table.x = max.x;
if (table.tables != null) {
max.x++;
}
countX(table.tables, max.x, max);
}
else
max.x = x + 1;
}
2、创建二维数组,对应html页面中要展示的表
T[][] ts = new T[max.x][max.y]; // T对应数据库表里的对象
上面的Java模型已经将每个对象的横(x)纵(y)坐标都算出来了,填充到这个二维数组即可
四、html页面展示
1、根据前面的Max对象画一个表格,标注坐标
2、用上面的二维数组填充表格
五、表格画好,接下来你可以不折手段了(这就是我不用ul的原因)
1、统计每行每列的数据
2、设置各种乱八七糟的样式
树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示的更多相关文章
- java集合树状结构及源码
java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...
- 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- 浅谈oracle树状结构层级查询测试数据
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- openerp学习笔记 对象间关系【多对一(一对一)、一对多(主细结构)、多对多关系、自关联关系(树状结构)】
1.多对一(一对一)关系:采购单与供应商之间的关系 'partner_id':fields.many2one('res.partner', 'Supplier', required=True, sta ...
- Android无限级树状结构
通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. package cn.asiontang.nleveltreelistview; import android.a ...
- 由简入繁实现Jquery树状结构
在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...
- JQuery 树状结构 jQuery-treeview.js 插件
由简入繁实现Jquery树状结构 在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一 ...
- oracle存储过程删除树状结构的表数据
今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...
- 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...
随机推荐
- 【MySQL】Create table 以及 foreign key 删表顺序考究。
1.以下是直接从数据库导出的建表语句. 1 -- ---------------------------- 2 -- Table structure for files 3 -- ---------- ...
- HTML5和HTML4的主要区别 [转]
原文:http://www.cnblogs.com/jiangyehu1110/archive/2013/07/10/3182277.html 1. HTML5标准还在制定中 这头一个不同之处显而易见 ...
- C# 委托及各种写法
委托是神马? 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法, ...
- java9
1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类.StringBuffer供我们使 ...
- nginx负载均衡基于ip_hash的session粘帖
nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...
- selenium常用的js总结
1. 对input执行输入 直接设置value属性, 此方法主要应对输入框自动补全以及readonly属性的element,sendkeys不稳定 比如: //inputbox is a WebEle ...
- resin 安装配置
resin (下载免费版 4) 前提:已经安装了Java运行环境,resin的安装需要jdk的支持 一.安装 1.cd /usr/local/src wget http://www.caucho. ...
- ul、li分列显示
目的很简单:有一个 ul>li 列表,默认为单列显示,把它变为两列显示. 方法1,使用DIV+CSS代码: <style type="text/css"> .my ...
- Jquery 实现点击tab切换页签
1.我将这个封装城了插件代码如下,你可以独立到一个js文件,然后页面引用下这个js文件: (function ($) { $.fn.extend({ qmTabs: function () { var ...
- c语言中(*p)[n]和*p[n]的区别
写于2016年12月5日. c语言中(*p)[n]表示的数组指针,在该表达式中按照运算的优先级,首先计算()的中*p,在和[n]计算.含义为指向含有n个元素的一维数组. *p[n]表示的是指针数组,在 ...