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. [转]推荐highcharts学习网址

    highcharts学习网址1:http://www.hcharts.cn/docs/index.php?doc=basic(百度highcharts中文教程即可) highcharts学习网址2:h ...

  2. [WPF系列]Button 自定义

    A Simple Cross Button for WPF   CREATING MORE COMPLEX BUTTONS IN XAML   WPF Custom Controls - Withou ...

  3. POJ2195 Going Home[费用流|二分图最大权匹配]

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22088   Accepted: 11155 Desc ...

  4. Java 线程同步

    线程同步 1.线程同步的目的是为了保护多个线程访问一个资源时对资源的破坏. 2.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的 ...

  5. Vector3.forward

    这里我要说的就是Vector3.forward ,它等价与 new Vector3(0,0,1):它并不是一个坐标,它是一个标准向量,方向是沿着Z轴向前.这样平移一次的距离就是1米, 如果 Vecto ...

  6. python3循环语句while

    Python的循环语句有for和while语句,这里讲while语句. Python中while语句的一般形式: while 条件判断 : 语句 需要注意冒号和缩进.另外,注意Python中没有do. ...

  7. css的命名规则

    本文转载自谈笑涧<css的命名规则> 操作系统版本:Windows 7 浏览器版本:IE6,IE7,IE8,Firefox 3.6.2,Safari 4.0.4,Chrome 5.0.35 ...

  8. LeetCode 笔记系列 17 Largest Rectangle in Histogram

    题目: Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar he ...

  9. C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)

    C#.ASP.NET获取当前应用程序的绝对路径,获取程序工作路径   ============================================ 使用 Application.Start ...

  10. 51Nod-1091 线段的重叠

    51Nod 1091:  http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091   1091 线段的重叠 基准时间限制: ...