列表在任何一门开发语言中都占有非常重要的地位,在.Net中有GridView,在extjs中有GridPanel。。。,而在java Swing中,它的名字叫JTable。这两天在研究JTable的使用,也有一些收获,所以在这里跟大家分享交流一下,下面的内容将包括:1)JTable的基本用法;2)怎样为JTable添加行点击响应事件,双击后打开窗口;3)怎样为JTable的行添加标识,如行id等;4)怎样在JTable中动态添加新行;

1)JTable的基本用法:

我用的IDE是NetBeans,由于也是简单做几个页面的客户端,主要还是Web开发的,所以暂时不打算深究java winform开发,所以界面怎么快就怎么做了,我直接在窗体的“设计”模式下直接拖“表格”出来就了事,在默认的情况下,这个表格还会有几行几列的填充内容的,如果需要编辑,可以先点击表格进入它的编辑状态,然后右击,选择“表内容”就可以进行表格的行和列的编辑了,不过通常情况下,表格的内容都是动态生成的,所以在控件上直接编辑它的内容的意义是不大的,当然,做DEMO时比较有用。

怎样为JTable初始化内容呢?我的习惯是在frame的构造方法来完成,其实通过查API可以得知,JTable支持多种构造方法,而我认为动态生成数据来说,用Vector对象的形式来生成列头配置及数据配置是比较简单直观的方法,下面来看个例子:

String[] columnModel = {"时间","编号","金额","操作员"};

Vector cmVector = new Vector();

for(int i = 0,cmCount = columnModel.length;i < cmCount;i++){

cmVector.addElement(columnModel[i]);

}

//绘制数据模型

Vector dataVector = new Vector();

TempOrdersList tempOrderList = TempOrdersManager.getInstance().getList();

int billCount = tempOrderList.size();

if(billCount > 0){

for(int j = 0;j < billCount;j++){

TempOrders orderItem = (TempOrders)tempOrderList.get(j);

String id = orderItem.getId();

String time = orderItem.getTime();

String no = orderItem.getNo();

float total = orderItem.getTotal();

String user = orderItem.getUser();

CustomTableCell idCell = new CustomTableCell(id,no,orderItem);

Vector rowVector = new Vector();

rowVector.addElement(time);

rowVector.addElement(idCell);

rowVector.addElement(total);

rowVector.addElement(user);

dataVector.addElement(rowVector);

rowVector = null;

idCell = null;

orderItem = null;

}

}

DefaultTableModel tableModel = new DefaultTableModel(dataVector,cmVector){

@Override

public boolean isCellEditable(int row,int column){

//只允许用户对第四列的数据进行编辑(第四列是数量)

if(column == 4){

return true;

}else{

return false;

}

}

};

BillTable.setModel(tableModel);

cmVector = null;

dataVector = null;

使用Vector对象作为构造方法的对象时,要传入两个Vector的实例,第一个是保存数据的Vector,第二个参数是保存列头信息的Vector,在

示例中的dataVector是通过遍历一个list对象而动态填充内容的,在实例化并初始化好Vector后,只要调用JTable的setModel方法,就可以将列头及数据的信息显示在表格中啦。

2)怎样添加行点击事件

首先,在JTable的设计视图中先选中JTable,然后右击,在事件的弹出菜单中依次选中"mouse-click”就可以捕捉表格的点击事件了,在这个事件监听方法中,会传入一个java.awt.event.MouseEvent类的实例evt,用evt.getClickCount(),就可以知道触发该事件时用户的点击次数,只要这个方法返回的值大于等于2,就说明用户双击了,下面的示例代码,供大家参考:

if(evt.getClickCount() >= 2){

int rowIndex = productTable.rowAtPoint(evt.getPoint());

int columnIndex = Common.getIndetityColumn(productTable);

//如果没有找到带有标记的列,就不向下执行了

if(columnIndex == -1){

return;

}

CustomTableCell identifyCell = (CustomTableCell)productTable.getValueAt(rowIndex, columnIndex);

String productId = identifyCell.getId();

ProductDetail productDetail = new ProductDetail(productId);

Common.centerWindow(productDetail);

//productDetail.setVisible(true);

}

3)怎样为JTable添加行标识

我们知道,JTable的每一个单元格,要求的值类型是一个Object的实例,也就是说,只要是一个对象就可以了,这个机制,给了我们非常大的发挥空间,我们可以在一个单元格中存放任意类型的对象,只要在这个对象中重写一下toString()方法,将我们希望在单元格中显示的内容return出来就可以了,只JTable本身,并没有提供设置行id等识别表格行对象的方法,所以我想到了自己定义一个单元格对象,每一行中至少有一个单元格是我所定义这个对象的实例,这样,在捕捉事件的时候,只要我从触发事件的行中提取到这个单元格对象出来,就解决了行标记的问题了。我定义的自定义单元格对象是这样的,有三个属性,一个是id,一个是text,还有一个是自定义对象项,id当然是这个行的唯一标识啦,text是单元格中要显示的内容,而自定义对象项,则是为了方便在这个单元格对象中附加一个对象,方便以后调用的,好了,看看我写的代码:

/**

* 自定义的表格单元格对象

* @author waitatlee@163.com 2011-6-17

*/

public class CustomTableCell {

private String cellText = "";

private String cellId = "";

private Object customObj = null;

/**

* 循例都要有空构造方法的啦

*/

public CustomTableCell(){

}

/**

* 只需初始化单元格显示内容

* @param _cellText

*/

public CustomTableCell(String _cellText){

this.setText(_cellText);

}

/**

* 同时初始化单元格的id和显示文本

* @param _cellId

* @param _cellText

*/

public CustomTableCell(String _cellId,String _cellText){

this.setText(_cellText);

this.setId(_cellId);

}

/**

* 完整参数的构造方法

* @param _cellId

* @param _cellText

* @param _customObj

*/

public CustomTableCell(String _cellId,String _cellText,Object _customObj){

this.setId(_cellId);

this.setText(_cellText);

this.setCustomObj(_customObj);

}

/**

* 设置单元格显示的文本

* @param _cellText

*/

public void setText(String _cellText){

this.cellText = _cellText;

}

/**

* 获取单元格显示的文本(默认为"")

* @return

*/

public String getText(){

return this.cellText;

}

/**

* 设置与单元格绑定的id值

* @param _cellId

*/

public void setId(String _cellId){

this.cellId = _cellId;

}

/**

* 获取与单元格绑定的id值(默认为"")

* @return

*/

public String getId(){

return this.cellId;

}

/**

* 设置单元格附加的自定义对象(按需调用)

* @param _obj

*/

public void setCustomObj(Object _obj){

this.customObj = _obj;

}

/**

* 获取单元格附加的自定义对象(默认为null)

* @return

*/

public Object getCustomObj(){

return this.customObj;

}

@Override

/**

* 重写的方法,jtable将根据这个方法的返回值来决定单元格显示的内容

*/

public String toString(){

return this.getText();

}

}

事实证明,这个类非常好用,特别是它的customObj方法,能将一个对象保存在行内的单元格中,在进行行点击响应的时候,再提取了出来,非常强大,示例:

CustomTableCell idCell = (CustomTableCell)table.getValueAt(i, idColumnIndex);

float quantity = Float.parseFloat(String.valueOf(table.getValueAt(i, quantityColumnIndex)));

Product product = (Product)idCell.getCustomObj();

这样,通过自定义的的单元格对象,能将整个对象获取出来,再作任何复杂的处理,都不怕啦,因为,你已经拥有所需要的一切了。

4)怎样在JTable中动态添加新行

其实这个问题非常简单,只要根据列模型生成相应的行对象,然后通过调用JTable的model对象的addRow方法就ok了,由于过于简单,所以直接贴代码来说明问题:

DefaultTableModel selectionTM = (DefaultTableModel)selectionTable.getModel();

Object[] tempRow = {code,idCell,spec,price,quantity,subTotal};

selectionTM.addRow(tempRow);

嗯,没错,这样就可以新增一行了,当然,在表格中新增一行远不止上面示例代码这么简单的,起码,大部分情况下是需要对行标识进行比对,看是否存在关键字相同的一行再作处理,像我所做的商品添加操作,如果请求新添加的商品项已经存在于表格中,那么事实上只需要将表格中相应商品行的数量加一就可以了,如果之前并没存在该商品项的情况下,再进行新增一行的操作。

java webtable_java winform开发:JTable详解相关推荐

  1. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  2. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  3. 《Java和Android开发实战详解》——2.2节构建Java应用程序

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.2节构建Java应用程序,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  4. JAVA 23种开发模式详解(代码举例)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  5. java GUI界面之JTable详解

    JTable是将数据以表格的形式显示给用户看的一种组件,它包括行和列,其中每列代表一种属性,例如:学号,姓名,成绩等等.而每行代表的是一个实体,例如一个学生.在JTable中,默认情况下列会平均分配父 ...

  6. 计算机毕业设计中JAVA 23种开发模式详解(代码举例)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  7. Java+大数据开发——HDFS详解

    1. HDFS 介绍  • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...

  8. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

  9. Thrift实现C#调用Java开发步骤详解

    概述 Thrift实现C#调用Java开发步骤详解 详细 代码下载:http://www.demodashi.com/demo/10946.html Apache Thrift 是 Facebook ...

最新文章

  1. mycat mysql 存储过程_MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程...
  2. 【转载】浅谈缺陷截图处理
  3. Logstash7.6.0同步MySQL到Elasticsearch
  4. 网易云信携手小天才Z6手表,让安全“看得见”
  5. 删除字符串中的所有相邻重复项
  6. Java关键字(53个关键字)
  7. 用Rocker制作模板
  8. opengl启动过程
  9. CKeditor的几种配置方式
  10. Easyui 弹出加载中的遮罩的两种方法
  11. 网站建设页面设计中CSS正确书写
  12. jQuery:实现排他
  13. 想知道程序员每天在干嘛吗?
  14. 北邮计算机自招,自招 · 帮 | 2019自主招生名额缩减,这样报考,省三也能逆袭985...
  15. 13.2-“制作一款私有IAP串口下载小工具”之串口IAP的通信协议设计
  16. excel单元格内容拆分_excel软件应用:如何妙用Word拆分单元格数据
  17. 汇编语言--D/A转换实验
  18. 天翼云云主机快照、云硬盘备份、云主机备份之间的区别
  19. 做软文营销发布有哪些常见平台?
  20. 手动编译kernel和supplicant使树莓派支持wpa3

热门文章

  1. 解决Mybatis-plus高版本不向后兼容的问题
  2. python 两个列表相互映射_零基础同学,一看就会的Python字典操作指南
  3. L1-014 简单题 (5 分)
  4. 洛谷——P1422 小玉家的电费
  5. JUC并发编程中的集合不安全问题源码解析
  6. JS报错:Uncaught(in promise)DOMException:play()
  7. opencv之图像边界填充-- copyMakeBorder
  8. Ubuntu之安装摄像头软件GTK_UVC_Viewer
  9. pip;python包管理工具
  10. mysql建表的字段类型和约束条件