Java表格的简单使用一
JTable组件使用的是模型/视图/控制器的设计方式,将可视化组件从其数据中分离出来,因此表格中的数据都封装在数据模型中。其中最重要的支持类就是TableModel类,这个类用来定义JTable类以及其数据模型之间的接口。
创建一个简单的表格:
import java.awt.*;
import javax.swing.*;
public class SimpleTableTest extends JFrame{ private static final long serialVersionUID = 1L;
protected JTable table;
protected Object[][] data;
protected String[] colname = {"编号","书名","作者","主角","类别","选择"};
public SimpleTableTest(){
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
createTableData(); //创建表格所需数据
table = getSimpleTable();
JScrollPane jsPane = new JScrollPane(table);
pane.add(jsPane,BorderLayout.CENTER);
}
public void createTableData(){
data = new Object[10][6];
int i =0;
data[i++] = new Object[]{"01","射雕英雄传","金庸","郭靖","武侠",true};
data[i++] = new Object[]{"02","神雕侠侣" ,"金庸","杨过","武侠",false};
data[i++] = new Object[]{"03","笑傲江湖" ,"金庸","令狐冲","武侠",true};
data[i++] = new Object[]{"04","鹿鼎记" ,"金庸","韦小宝","武侠",false};
data[i++] = new Object[]{"05","大旗英雄传" ,"古龙","铁中棠","武侠",false};
data[i++] = new Object[]{"06","陆小凤传奇" ,"古龙","陆小凤","武侠",false};
data[i++] = new Object[]{"07","多情剑客无情剑" ,"古龙","李寻欢","武侠",false};
data[i++] = new Object[]{"08","三国演义" ,"罗贯中","无","古典名著",false};
data[i++] = new Object[]{"09","封神演义" ,"陈仲琳","无","古典名著",false};
data[i++] = new Object[]{"10","绿野仙踪" ,"李百川","冷于冰","古典名著",false};
}
public static void main(String[] args){
SimpleTableTest stt= new SimpleTableTest();
stt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
stt.setSize(400, 200);
stt.setVisible(true);
}
/**
* 返回一个简单的表格
* @return
*/
public JTable getSimpleTable(){
table = new JTable(data,colname);
return table;
}
}
运行结果如下图所示:
虽然没有创建表格模型,但是JTable的构造函数默认创建了一个表格模型。
public JTable(final Object[][] rowData, final Object[] columnNames) {
this(new AbstractTableModel() {
public String getColumnName(int column) { return columnNames[column].toString(); }
public int getRowCount() { return rowData.length; }
public int getColumnCount() { return columnNames.length; }
public Object getValueAt(int row, int col) { return rowData[row][col]; }
public boolean isCellEditable(int row, int column) { return true; }
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
});
}
该构造函数实现了AbstractTableModel类。上述六种方法的作用是:返回表格的列名,返回行数,返回列数,返回特定单元格的值,判断特定单元格是否可编辑,设置特定单元格的值。
另外Java也提供了另外一种类DefaultTableModel类来实现TableModel接口。
AbstractTableModel与DefaultTableModel的区别
简单来说,DefaultTableModel使用起来要容易一些,但是DefaultTableModel在使用时会将所有的数据加载到内存中,因此适合表格中只含有少量数据时使用。而AbstractTableModel适合显示大量数据时使用,它不会将所有数据都载入内存,只有在需要时才会加载数据,从而最小限度的使用内存。
设置表格的样式
/**
* 设置表格风格
* @param tb
*/
public void setSimpleTableStyle(JTable tb){
//设置表头的背景色
tb.getTableHeader().setBackground(Color.BLUE);
//设置表头的文字颜色
tb.getTableHeader().setForeground(Color.RED);
//设置表头字体
tb.getTableHeader().setFont(new Font("隶书",Font.PLAIN,14));
// 设置行高
tb.setRowHeight(30);
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.getColumn(colname[0]).setPreferredWidth(150); //设置第1列的宽度
table.getColumn(colname[1]).setPreferredWidth(140); //设置第2列的宽度
table.setBackground(new Color(244, 244, 242)); //设置表格背景
tb.setForeground(Color.GREEN); //设置表格颜色
tb.setFont(new Font("隶书",Font.PLAIN,14)); //设置表格字体
// 隐藏最后一列
table.getColumn(colname[colname.length - 1]).setMaxWidth(0);
table.getColumn(colname[colname.length - 1]).setMinWidth(0);
table.getColumn(colname[colname.length - 1]).setPreferredWidth(0);
//设置表格的自动调整模式
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//设置表格的行选择模式
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//设置是否允许选择表格行
table.setRowSelectionAllowed(true);
//设置是否允许选择表格列
table.setColumnSelectionAllowed(true);
//设置是否允许同时存在行选择与列选择
table.setCellSelectionEnabled(true);
}
运行结果:
需要注意的是getColumn()方法是通过列名来获取对应列的TableColumn对象,当表格中有相同列名时只返回最先匹配列的TableColumn对象。你可以在列名前后加上空格用来区分。
Java表格的简单使用一的更多相关文章
- 使用 java 实现一个简单的 markdown 语法解析器
1. 什么是 markdown Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的 ...
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)
1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...
- Java 异步处理简单实践
Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- Java中的简单工厂模式
举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...
- Java之英格玛简单实现以及加密验证码的应用
最近看了一部电影<模仿游戏>,<模仿游戏>中艾伦·图灵破译英格玛让我对英格玛产生了好奇,于是就开始翻阅资料对其进行研究,但是毕竟智慧有限,所以我这里用Java实现一个简单的英格 ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- java Socket实现简单在线聊天(二)
接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...
- Java消息系统简单设计与实现
前言:由于导师在我的毕设项目里加了消息系统(本来想水水就过的..),没办法...来稍微研究研究吧..简单简单... 需求分析 我的毕设是一个博客系统,类似于简书这样的,所以消息系统也类似,在用户的消息 ...
随机推荐
- css3实现循环执行动画,且动画每次都有延迟
一.最终效果 需求:gift图片的小动画每隔2s执行一次. 需求就一句话,我们看一下实现过程. 二.实现过程 1.网页结构 <!DOCTYPE html> <html lang=&q ...
- 浅谈Oracle权限体系
对于数据库来讲,安全性的重要程度不言而喻,今天我们就来聊一聊Oracle的权限体系. 1.账户管理 在此之前,先解释下一个容易混淆的概念:模式.所谓模式,指的是用户账户所拥有的一组对象(比如表,索引, ...
- c++学习之容器细枝末节(2)
从昨天到现在,还依然停留在容器的学习上,现在写例程代码顺手多了,看来写代码还是要多多练习才能有感觉. 经过一天的学习,有一下几点知识点让我觉得很有意义: (1)删除容器中的元素的时候,pop_fron ...
- 你知道 Twitter,但你可能不知道它的 “成长模式” 和 “参与阶梯”
当你为产品创建 “成长模式” 时,你需要回答以下关键问题(类Twitter产品:http://www.jinhusns.com/Products/Download/?type=xcj ): 目标:产品 ...
- CSS/CSS3常用样式小结
1.强制文本单行显示: white-space:nowrap; 多行文本最后省略号: display: -webkit-box; -webkit-line-clamp:2; overflow: hid ...
- HDU1890 Robotic Sort[splay 序列]
Robotic Sort Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Map接口使用注意事项
1,Map接口对象本身不能直接使用迭代进行输出的.因为map每个位置存放的是一对值. 而iterator每次只能找到一个值.如果一定要迭代输出,可以通过以下步骤.: 但是,Map接口只作为查找使用,输 ...
- 深入理解Java之泛型
原文出处: absfree 1. Why ——引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象.然而,过 ...
- Win10 VC++6 无法启动此程序,因为计算机中丢失mfc42d.dll 需要提升
亲测可用 1.无法启动此程序,因为计算机中丢失mfc42d.dll 我也遇到了这个问题,并且顺利解决了!按一下流程搞定的: “工程-设置-常规-microsoft基础类,(选择使用MFC作为静态链接库 ...
- 关于今天很热的--FizzBuzzWhizz
今天早上到现在看到了3篇关于FizzBuzzWhizz的问题,第一篇是@程序媛想事儿(Alexia)[最难面试的IT公司之ThoughtWorks代码挑战--FizzBuzzWhizz游戏]其实题目不 ...