由jtable浅谈vector<vector<Object>>的用法(转自a718515028的专栏)
以前只用过vector<Object> ,但是在做从数据库导出数据放到jtable中时,发现还有个vector<vector<Object>>的用法。
先说jtable和DefaultTableModel
jtable本身是可以显示一张列表,但是不能按钮监听的增加正行数据。
jtable中没有addRow(Object[] rowData) 或者addRow(Vector rowData) ,方法。
但是jtable中有一个构造方法,JTable(TableModel dm)
而TableModel是一个接口,实现这个接口有一个常用的类DefaultTableModel。在DefaultTableModel中有一个方法,addRow(Object[] rowData)可以将一个一维数组的数据添加到这个table中model的结尾,同时还有一个addRow(Vector rowData)方法,可以将一个Vector集合添加到table中model的结尾。
tip:
说明为什么会有addRow(Object[] rowData)和addRow(VectorrowData)呢?
我们知道数组有个特性就是长度固定,addRow(Object[] rowData)只 能添加长度固定的一个数组数据。也就是说如果要查询的数据的长度的未知,如果用数组就需要事先初始化数组的长度,当由于长度未知,就不得不设置的很大以至于能存储要查询的数据。如果数据不够这个这个数组的长度,那么剩余的长度也会添加到中table或者table的model中,这些部分将以空白数据显示 在table中
而vector有个特性就是长度可变,有多少数据就用多少的vector长度,不够的自动增长为原来长度的一倍。 在向table中或model中添加数据时,就算要查询的数据的长度未知,vector也会自动增加长度容纳这些数据,不会造成空间浪费。既然 vector中没有空白的空间,那么table中也就自然不存在空白的数据。
怎样把数据以jtable显示。
jtable中的数据是以二维数组的形式添加到table中的,
publicJTable(Object[][] rowData,Object[] columnNames)
前面一个参数代表数据,后面一个代表列。
如:
String [] title = {"学号","姓名","成绩"};
Object[][]o = {{"1","张三","80"},{"2","里斯","550"},{"3","王二","70"}};
Jtable jt = newJTable(o,title);
这只是显示固定的数据。如果要显示从数据库中查询出来的数据, 就必然用到vector<vector<Object>>。为什么不直接用Vector<Object>,如直接把 Vector<Student>,直接加到jtable中,Student对象可以自动得到student的姓名、成绩等值,加入到 jtable中??这种说看似很合理,但是,我们要知道jtable只能显示一个数据,不会智能的显示这个对象的各个属性值,所以我们要把这个 Student对象的属性值也要显式的输出来放到一个集合中,再放到table中。table的每行组成一个vector,每一行的数据有组成一个 vector,就需要在vector中再放一个vector,因为vector的底层也是基于数组的,所以就好像是一个二维数组,第一个vector代表 行,第二个vector代表这个行的各列数据。
在API中DefaultTableModel的一个构造方法是这样定义的
DefaultTableModel
public DefaultTableModel(Vector data,
Vector columnNames)构造一个 DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。
参数:
data - 表的数据,它是一个 Vector,由包含多个 Object 值的 Vector 组成(注意)
columnNames - 包含新的列名称的 vector
比如我们有一个已经查询好的集合Vector<Book> bookList;
在jtable中显示这个集合
Vector<String> title = newVector<String>();// 列名
title.add("ISBN");
title.add("书名");
title.add("书类型");
title.add("单价");
Vector<Vector<Object>> data = newVector<Vector<Object>>();//
for (int i = 0; i < bookList.size(); i++) {
Vector<Object>v = new Vector<Object>();//里面一层的vector存放书的各个数据
Bookb = bookList.get(i);
v.add(b.getIsbn());
v.add(b.getBookName());
v.add(b.getBookType());
v.add(b.getPrice());
data.add(v);//外面一层的vector data存放已经有数据的第一个vector v
}
DefaultTableModel model = new DefaultTableModel(data, title);
table = new JTable(model){
publicboolean isCellEditable(int row,int col){
return false;}};//利用一个匿名内部类重写这个jtable中isCellEditable方法,设置为不可编辑。
由jtable浅谈vector<vector<Object>>的用法(转自a718515028的专栏)的更多相关文章
- [Cocos2d-x v3.x]浅谈容器Vector
转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853 前两天有人问我说在3.0 beta2版本号 ...
- 浅谈数据结构vector
vector: 又名 向量 1.C++中的一种数据结构. 2.是一个类. 3.相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. A.使用时, ...
- 浅谈 [Ljava.lang.Object 异常
http://blog.csdn.net/goodleiwei/article/details/7059567 主要原因:取出的是对象的数组,需要遍历单个的对象并获取想用的属性值
- 浅谈Floyd的三种用法 By cellur925
Floyd大家可能第一时间想到的是他求多源最短路的n³算法.其实它还有另外两种算法的嘛qwq.写一发总结好了qwq. 一.多源最短路 放段代码跑,注意枚举顺序,用邻接矩阵存图.本质是一种动规. 复杂度 ...
- 浅谈dynamic的简单使用用法
今天看了博客园里面的dynamic用法,我犹豫从来没接触过,今天恶补了一下,把我对dynamic的认识分享了出来,大家一起学习. Visual C# 2010 引入了一个新类型 dynamic. 该类 ...
- 浅谈Invoke 和 BegionInvoke的用法
很多人对Invoke和BeginInvoke理解不深刻,不知道该怎么应用,在这篇博文里将详细阐述Invoke和BeginInvoke的用法: 首先说下Invoke和BeginInvoke有两种用法: ...
- VC++ 浅谈VS2010中CMFCToolBar的用法
本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...
- 浅谈移动端rem的用法
一 什么是rem? “font size of the root element 这是w3c的定义 也就是说是相对于根节点(html节点)的字体大小的单位. 目前主流的浏览器基本都支持rem这个单位, ...
- 浅谈mmap()和ioremap()的用法与区别
一.mmap()mmap()函数是用来将设备内存线性地址映射到用户地址空间.(1)首先映射基地址,再通过偏移地址寻址:(2)unsigned char *map_cru_base=(unsigned ...
随机推荐
- 接水果(fruit)
接水果(fruit) 风见幽香非常喜欢玩一个叫做 osu! 的游戏,其中她最喜欢玩的模式就是接水果.由于她已经 DT FC 了 The big black,她觉得这个游戏太简单了,于是发明了一个更加难 ...
- bzoj4386 Wycieczki
题目描述 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 输入 第 ...
- knockout 表单绑定 要怎么Mapping才好
问题 之前有了解过knockout,学习过绑定语法,结合帮助文档,做个Demo倒也不成问题,但是部分地方很不爽,不知道是我的用法不对,还是功力不够. 比如说,标签里定义的data-bind属性名,必须 ...
- F28379D烧写双核程序(在线&离线)
烧写双核程序前需知在分别对F28379D的CPU1和CPU2两个核进行烧写程序时,需要在CCS中建立两个工程,独立编写两个核的程序.如controlSUITE中提供的双核程序例程: 1. 在线1.1 ...
- Linux的日志错误级别
讯息等级 系统将讯息分为七个主要的等级,依序是由不重要排列到重要讯息等级: info:仅是一些基本的讯息说明而已: notice:比 info 还需要被注意到的一些信息内容: warning 或 wa ...
- Selenium2+python自动化11-定位一组元素find_elements【转载】
前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...
- 【原创】DataPackage-数据库、表的区域设置和系统不一致导致处理失败
问题描述: 最近学习Datapackage,创建完之后,部署处理但总是提示某某字段的区域设置和目标字段的区域设置不一致,具体如图: 测试发现其它的数据库表又没有这类的问题发生,甚是苦恼,搜寻了好久,后 ...
- HDU 6038.Function-数学+思维 (2017 Multi-University Training Contest - Team 1 1006)
学长讲座讲过的,代码也讲过了,然而,当时上课没来听,听代码的时候也一脸o((⊙﹏⊙))o 我的妈呀,语文不好是硬伤,看题意看了好久好久好久(死一死)... 数学+思维题,代码懂了,也能写出来,但是还是 ...
- UVA 10054 The Necklace (无向图的欧拉回路)
本文链接:http://www.cnblogs.com/Ash-ly/p/5405904.html 题意: 妹妹有一条项链,这条项链由许多珠子串在一起组成,珠子是彩色的,两个连续的珠子的交汇点颜色相同 ...
- AtCoder Grand Contest 012 B Splatter Painting (反向处理 + 记忆化)
题目链接 agc012 Problem B 题意 给定一个$n$个点$m$条边的无向图,现在有$q$个操作.对距离$v$不超过$d$的所有点染色,颜色编号为$c$. 求每个点最后的颜色状态. 倒过 ...