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表格的简单使用一的更多相关文章

  1. 使用 java 实现一个简单的 markdown 语法解析器

    1. 什么是 markdown Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的 ...

  2. Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)

    1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...

  3. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

  4. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  5. Java中的简单工厂模式

    举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...

  6. Java之英格玛简单实现以及加密验证码的应用

    最近看了一部电影<模仿游戏>,<模仿游戏>中艾伦·图灵破译英格玛让我对英格玛产生了好奇,于是就开始翻阅资料对其进行研究,但是毕竟智慧有限,所以我这里用Java实现一个简单的英格 ...

  7. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  8. java Socket实现简单在线聊天(二)

    接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...

  9. Java消息系统简单设计与实现

    前言:由于导师在我的毕设项目里加了消息系统(本来想水水就过的..),没办法...来稍微研究研究吧..简单简单... 需求分析 我的毕设是一个博客系统,类似于简书这样的,所以消息系统也类似,在用户的消息 ...

随机推荐

  1. XLT格式化XML那点事(C#代码中的问题解决)(二)

    接上篇<XML通过XSL格式化的那点事(XML到自定义节点折叠显示)>,本文就如何将大的XLST分割成小文件和如何用C#将XML通过XSL生成HTML文件中的问题做下分析,避免有同样需求的 ...

  2. 数据分析:.Net程序员该如何选择?

    上文我介绍了用.Net实现的拉勾爬虫,可全站采集,其中.Net和C#(不区分)的数据爬取开始的早,全国主要城市都有一定数量的分布,加上有了近期其他相似技术类别的数据进行横向比较,可以得到比较合理的推测 ...

  3. 第37课 深度解析QMap与QHash

    1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...

  4. Time.deltaTime 的平均值在0.1-0.2左右

    Time.deltaTime 平均值在0.1-0.2左右 低的在0.03 高的在0.3

  5. u3d_Shader_effects笔记6 第四章 使用cubeMap简单的反射读取

    一:前面心情: 1.今天开了个小会,该看的继续要看,不要堕落. 2.还有就是丽的生活习惯不太好.慢慢改变. 3.哎,公司人员争夺吗?哎,不知道,不了解,不去想,提升自己,内心明净 二.主要内容和参考 ...

  6. Mac下打开eclipse 始终提示 你需要安装Java SE 6 Runtime

    Mac下打开eclipse 始终提示 你需要安装Java SE 6 Runtime        周银辉 我的mac os 版本是10.9.2,  JDK配置得好好的,但打开eclipse时还是提示需 ...

  7. .NET定时任务执行管理器开源组件–FluentScheduler

    在日常项目里通常会遇到定时执行任务的需求,也就是定时器..NET Framework里关于定时器的类有3个,分别是System.Windows.Forms.Timer.System.Timers.Ti ...

  8. 6款程序员不得不爱的bootstrap模板

    Bootstrap是基于jQuery框架开发的,它在jQuery框架的基础上进行了更为个性化和人性化的完善,形成一套自己独有的网站风格,并兼容大 部分jQuery插件.Bootstrap中包含了丰富的 ...

  9. ajax 请求另一个html页面的指定的一部分 加载到本页面div

    $.ajax( { url: url, //这里是静态页的地址 type: "GET", //静态页用get方法,否则服务器会抛出405错误 success: function(d ...

  10. ionic路由传值

    ionic路由传值 app.js ===================================== //新建工作任务.state(‘app.newTask’, angularAMD.rout ...