`
hulianwang2014
  • 浏览: 703597 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

表格(普通应用)

 
阅读更多
JavaDoc对JTable的解释是用来显示和编辑常规二维单元表,JTable是Swing中最复杂的组件,它是一个规则的二维表,但是又因为它有很多Renderer和Editer使得它可以实现很多复杂的效果.
JTable也是遵循MVC模式设计和实现的,Model使用的是实现TableModel接口的类,Java提供了AbstractTableModel和DefaultTableModel供我们使用,我们也可以通过实现TableModel接口或者继承AbstractTableModel使用我们自己的Model.



JTable的View内的方法都是通过修改TableModel的数据然后再通过fireTableStructureChanged反映到画面的.
JTableUI都是通过TbaleUITableHeaderUI控制的,JTable再通过CellRenderer,CellEditor,HeaderRendererHeaderEditor等渲染它的外观.
当然对于JTable的操作就不会这么简单了,它实现了ColumnModel,RowModel,SelectedModel,DropModel等处理各种事件,对应也有各种Renderer,这些我们一般都不会太关心.因为我们实际运用JTable时遇到的主要问题不在这些方面.
我们一般关心的是外观,那样的话主要关注的是UI;关注数据存储性能,需要修改的是Model;关注外观渲染形式,则需要修改的是各种RendererEditor,除非真的需要关注复杂事件,否则一般我们不会重写后面的那些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内放置组件、特殊效果等会在以后介绍.

分享到:
评论

相关推荐

    Word 2021三线表格技巧.docx

    "样式基于"这一项可以让我们在已有样式的基础上添加一些新的属性,这里我们选择普通表格就行了。 接下来,我们需要设置表格的上框线和下框线。点击"格式应用于"一栏,选择"整个表格",然后设置表格的上框线和下框线...

    轻松Excel电子表格批量导入快递单打印软件 v6.9.075.zip

    轻松Excel电子表格批量导入快递单打印软件通过ExceL表格可以批量导入订单,打印快递单,既可以打印普通面单又能打印电子热敏单。适用建行善融商城快递单打印,钱宝网快递单打印。有标准订单表格。 轻松Excel电子表格...

    航母表格快递单打印软件v5.0.02官方中文安装版

    可以打印普通快递但单和热敏电子快递单,可用于微商、淘宝、天猫、团购网等平台。 操作简单人性化,无需勾选一键打印。可以双击编辑每一个打印项目,打造您个性的快递单,完全按照您的交易习惯进行设计,快来下载...

    Flexigrid——功能丰富的数据表格

    Flexigrid是一个基于jQuery的数据表格应用,功能丰富,支持多栏调用和滚屏操作,能够连接XML格式的数据源,并使用Ajax动态载入。支持分类栏标题,支持主题切换,可以转换为普通的表格,可以显示隐藏栏目等。

    excel函数行业应用350例

    编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...

    办公软件应用专家样题CEAC_4001_信息化办公-文档处理_11借鉴.pdf

    本资源为 office 软件应用专家样题 CEAC_4001 信息化办公文档处理,涵盖了 office 软件的基本操作和高级应用,包括文档处理、表格处理、页码设置、图片插入、表单管理等内容。通过本资源,读者可以学习和掌握 office...

    ExcelPlus电子表格 v3.20

    ExcelPlus是一个电子表格,除了普通电子表格的所有功能外,还增加了智能感应,数字预警(原预算设定)和丰富的3D图表。本表格可以在个人、家庭、公司及各行各业中使用,特别适合记账和记事。ExcelPlus电子表格主要...

    jQuery EasyUI 1.3 API 中文教程

    api+实例解析 对于普通系统开发绝对够用了 演示范例 拖动与菜单 一般拖动 - Draggable 拖放 - DragDrop 拖放二 - DragDrop 拖放三 - DragDrop 缩放 - Resizable 滑动条 - Slider 菜单 - Menu 菜单...

    EXCEL VBA编写的实用治具/工具管理程序/表格

    而利用VBA编程添加的功能又强化了整个管理应用. 功能: 数据更新须通过控件来操作完成,且设置了普通用户,管理员用户和超级管理员账户3个权限. 我们原来是使用扫描枪刷治具上的条形码来完成记录的自动进库. 额外的...

    EXCEL函数应用方法大全

    编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...

    Excel函数应用之函数简介

    编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...

    华创网表(电子表格理念+数据库+网络化)

    电子表格理念+数据库+网络架构,能让您快速构建适合自己的、网络版的管理软件,彻底破解传统实施方案的弊端。 ●用途广泛 信息管理平台的推出,很快得到市场的广泛认同,已应用于政府、企业、学校、医院等单位的各种...

    2021年普通高中信息技术学业水平测试考试题库及答案.docx

    本文档是2021年普通高中信息技术学业水平测试考试题库及答案,涵盖了信息技术的多个方面,包括计算机基础知识、信息技术应用、网络技术、数据库管理、信息安全等。以下是对题库中所涉及的知识点的详细说明: 一、...

    Excel函数应用之数学和三角函数

    编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数...

    计算机应用基础课堂笔记.doc

    Word提供了公式应用功能,可以通过将光标定位到单元格中,打开表格菜单-&gt;公式,实现公式的应用。 十、绘制斜线表头 可以通过选择表格,打开表格菜单-&gt;绘制斜线表头,实现斜线表头的绘制。 十一、文本转换为表格 ...

    “银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”.doc

    在实际应用中,银行家算法最多的情况就是在大数据量的表格计算中,对于普通用户来说,无论是理解还是最终使用,都很繁琐且复杂。通过使用自定义函数,可以使用户更加方便地使用银行家算法。 在前端表格中,我们可以...

    湖南省2017年普通高等学校对口招生考试计算机应用类综合试卷.docx

    湖南省 2017 年普通高等学校对口招生考试计算机应用类综合试卷 以下是从给定的文件信息中生成的相关知识点: 计算机基础知识 1. 十六进制数与十进制数的转换:十六进制数 1A 转换为十进制数的值是 26。 2. 计算机...

    2018四川省普通高等学校专升本大学计算机基础考试大纲.doc

    本资源摘要信息为2018四川省普通高等学校专升本大学计算机基础考试大纲,旨在考察考生的计算机基础知识和基本应用能力,涵盖了计算机基础知识、操作系统、文字处理、电子表格软件、PowerPoint软件、计算机网络等方面...

    《计算机应用技能》教学课件:第六章 演示文稿软件PowerPoint.ppt

    计算机应用技能 - PowerPoint演示文稿软件 PowerPoint是一种功能强大且广泛应用的演示文稿软件,由微软公司开发。它广泛应用于商业、教育、科学研究等领域,用于创建演示文稿、报告、项目计划、教学课件等。下面是...

    Excel函数应用方法大全

    编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮

Global site tag (gtag.js) - Google Analytics