JavaDoc对JTable的解释是用来显示和编辑常规二维单元表,JTable是Swing中最复杂的组件,它是一个规则的二维表,但是又因为它有很多Renderer和Editer使得它可以实现很多复杂的效果.
JTable也是遵循MVC模式设计和实现的,Model使用的是实现TableModel接口的类,Java提供了AbstractTableModel和DefaultTableModel供我们使用,我们也可以通过实现TableModel接口或者继承AbstractTableModel使用我们自己的Model.
JTable的View内的方法都是通过修改TableModel的数据然后再通过fireTableStructureChanged反映到画面的.
JTable的UI都是通过TbaleUI和TableHeaderUI控制的,JTable再通过CellRenderer,CellEditor,HeaderRenderer和HeaderEditor等渲染它的外观.
当然对于JTable的操作就不会这么简单了,它实现了ColumnModel,RowModel,SelectedModel,DropModel等处理各种事件,对应也有各种Renderer,这些我们一般都不会太关心.因为我们实际运用JTable时遇到的主要问题不在这些方面.
我们一般关心的是外观,那样的话主要关注的是UI;关注数据存储性能,需要修改的是Model;关注外观渲染形式,则需要修改的是各种Renderer和Editor,除非真的需要关注复杂事件,否则一般我们不会重写后面的那些Model.
首先还是从最基础的应用开始说起:
先看Sun官方的例子:
这个例子是最最简单的JTable的应用,没有修改JTable的任何样式,只是单纯的赋予数据.
先定义JTable的表头:
// table column
String[] columnNames = {
"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian" };
然后是JTable内的数据:
// table data
Object[][] data = {
{
"Mary",
"Campione",
"Snowboarding",
new Integer(5),
new Boolean(false)
},
它的列数是和表头对应的,当然也可以用Vector定义.
然后把JTable创建出来:
final JTable table =
new JTable(data, columnNames);
然后设置一个首先大小:
table.setPreferredScrollableViewportSize(new
Dimension(500, 120));
table.setFillsViewportHeight(true);
最后显示到画面:
// Create the scroll pane and add the table to it.
JScrollPane scrollPane =
new JScrollPane(table);
然后开始改变它,首先是外观显示:
改变线的颜色:
//Sets the color used to draw grid lines
table.setGridColor(Color.red);
改变行高:
//Sets the height, in pixels
table.setRowHeight(20);
改变前景色、背景色:
//Sets the background color of this component
table.setBackground(Color.cyan);
//Sets the foreground color of this component
table.setForeground(Color.black);
改变选择模式:
//Sets the table's selection mode to allow
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
改变某列的宽度:
//Sets this column's preferred width
table.getColumnModel().getColumn(2).setPreferredWidth(150);
使列不可大小变动:
//Sets whether the user can resize columns
table.getTableHeader().setResizingAllowed(false);
JTable自动调整大小:
//Sets the table's auto resize
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
隐藏某一列:
//hide column
table.getColumnModel().getColumn(3).setMaxWidth(0);
table.getColumnModel().getColumn(3).setMinWidth(0);
最后效果如下图:
当然JTable还有很多的属性可以定制,直接参考API就可以了,可惜的是JTable的好多属性定制都是大众化的,比如我们只需要一条线是带颜色的,只需要某一种类型的数据是变色的就需要自己实现Renderer来渲染了,这在以后会写到.
然后是JTable的事件处理,JTable 继承于JComponent,这样它就有了JComponent的全部事件,但是对于容器变更addComponentListener,
属性变更addPropertyChangeListener等事件我们一般都不会关心,我们关心的主要是鼠标事件addMouseListener和选择事件addListSelectionListener,这儿演示下这两种事件的处理:
首先是选择事件:
行选择事件:
ListSelectionModel rowSM =
table.getSelectionModel();
rowSM.addListSelectionListener(new
ListSelectionListener() {
publicvoid valueChanged(ListSelectionEvent e) {
列选择事件:
ListSelectionModel colSM =
table.getColumnModel()
.getSelectionModel();
colSM.addListSelectionListener(new
ListSelectionListener() {
publicvoid valueChanged(ListSelectionEvent e) {
然后根据lsm.getMinSelectionIndex();就可以取得现在选择的行和列了.
②然后是鼠标事件:
直接在JTable上加监听: table.addMouseListener(this);
然后处理就可以了.
@Override
publicvoid
mouseClicked(MouseEvent e) {
if (e.getSource()
instanceof JTableHeader) {
if (SwingUtilities.isRightMouseButton(e)) {
// right mouse button click in JTableHeader
}
}
else {
if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
// double left mouse button click in JTable
//Returns the index of the row that point lies in
int row =
table.rowAtPoint(e.getPoint());
//Returns the index of the column that point lies in
int column =
table.columnAtPoint(e.getPoint());
//return cell value
System.out.println(table.getValueAt(row,
column));
}
elseif (SwingUtilities.isRightMouseButton(e)) {
// right mouse button click in JTable
}
}
}
最后再说下JTable的数据模型,JTable默认使用DefaultTableModel数据模型,所有的数据都是String的,所有的单元格都是可编辑的,这明显不满足我们的需求,所以我们大部分时候需要自己实现数据模型.
这里我们继承AbstractTableModel类来实现自己的数据模型.
//own table model.
class
MyTableModel extends AbstractTableModel {
复写方法:
@Override
public Class<?
extends Object> getColumnClass(int
c) {
return getValueAt(0, c).getClass();
}
实现单元格是指定的数据类型
@Override
publicvoid setValueAt(Object value,
int row,
int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
实现单元格值改变
@Override
publicboolean
isCellEditable(int row,
int col) {
// Note that the data/cell address is constant,
// no matter where the cell appears
onscreen.
if (col < 2) {
returnfalse;
}
else {
returntrue;
}
}
实现单元格编辑
最后使用它:
JTable table =
new JTable(new
MyTableModel());
效果图:
到这里,简单的JTable的使用就完成了,我们可以用数据填充一个JTable,可以改变编辑,可以设置前景色、背景色,可以设置列宽度,可以设置监听,至于复杂的比如合并单元格、排序、改变表头、合并表头、增加行号、增加悬浮提示、表头隐藏、Table内放置组件、特殊效果等会在以后介绍.
分享到:
相关推荐
"样式基于"这一项可以让我们在已有样式的基础上添加一些新的属性,这里我们选择普通表格就行了。 接下来,我们需要设置表格的上框线和下框线。点击"格式应用于"一栏,选择"整个表格",然后设置表格的上框线和下框线...
轻松Excel电子表格批量导入快递单打印软件通过ExceL表格可以批量导入订单,打印快递单,既可以打印普通面单又能打印电子热敏单。适用建行善融商城快递单打印,钱宝网快递单打印。有标准订单表格。 轻松Excel电子表格...
可以打印普通快递但单和热敏电子快递单,可用于微商、淘宝、天猫、团购网等平台。 操作简单人性化,无需勾选一键打印。可以双击编辑每一个打印项目,打造您个性的快递单,完全按照您的交易习惯进行设计,快来下载...
Flexigrid是一个基于jQuery的数据表格应用,功能丰富,支持多栏调用和滚屏操作,能够连接XML格式的数据源,并使用Ajax动态载入。支持分类栏标题,支持主题切换,可以转换为普通的表格,可以显示隐藏栏目等。
编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...
本资源为 office 软件应用专家样题 CEAC_4001 信息化办公文档处理,涵盖了 office 软件的基本操作和高级应用,包括文档处理、表格处理、页码设置、图片插入、表单管理等内容。通过本资源,读者可以学习和掌握 office...
ExcelPlus是一个电子表格,除了普通电子表格的所有功能外,还增加了智能感应,数字预警(原预算设定)和丰富的3D图表。本表格可以在个人、家庭、公司及各行各业中使用,特别适合记账和记事。ExcelPlus电子表格主要...
api+实例解析 对于普通系统开发绝对够用了 演示范例 拖动与菜单 一般拖动 - Draggable 拖放 - DragDrop 拖放二 - DragDrop 拖放三 - DragDrop 缩放 - Resizable 滑动条 - Slider 菜单 - Menu 菜单...
而利用VBA编程添加的功能又强化了整个管理应用. 功能: 数据更新须通过控件来操作完成,且设置了普通用户,管理员用户和超级管理员账户3个权限. 我们原来是使用扫描枪刷治具上的条形码来完成记录的自动进库. 额外的...
编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...
编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...
电子表格理念+数据库+网络架构,能让您快速构建适合自己的、网络版的管理软件,彻底破解传统实施方案的弊端。 ●用途广泛 信息管理平台的推出,很快得到市场的广泛认同,已应用于政府、企业、学校、医院等单位的各种...
本文档是2021年普通高中信息技术学业水平测试考试题库及答案,涵盖了信息技术的多个方面,包括计算机基础知识、信息技术应用、网络技术、数据库管理、信息安全等。以下是对题库中所涉及的知识点的详细说明: 一、...
编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...
Word提供了公式应用功能,可以通过将光标定位到单元格中,打开表格菜单->公式,实现公式的应用。 十、绘制斜线表头 可以通过选择表格,打开表格菜单->绘制斜线表头,实现斜线表头的绘制。 十一、文本转换为表格 ...
在实际应用中,银行家算法最多的情况就是在大数据量的表格计算中,对于普通用户来说,无论是理解还是最终使用,都很繁琐且复杂。通过使用自定义函数,可以使用户更加方便地使用银行家算法。 在前端表格中,我们可以...
湖南省 2017 年普通高等学校对口招生考试计算机应用类综合试卷 以下是从给定的文件信息中生成的相关知识点: 计算机基础知识 1. 十六进制数与十进制数的转换:十六进制数 1A 转换为十进制数的值是 26。 2. 计算机...
本资源摘要信息为2018四川省普通高等学校专升本大学计算机基础考试大纲,旨在考察考生的计算机基础知识和基本应用能力,涵盖了计算机基础知识、操作系统、文字处理、电子表格软件、PowerPoint软件、计算机网络等方面...
计算机应用技能 - PowerPoint演示文稿软件 PowerPoint是一种功能强大且广泛应用的演示文稿软件,由微软公司开发。它广泛应用于商业、教育、科学研究等领域,用于创建演示文稿、报告、项目计划、教学课件等。下面是...
编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮