Welcome 微信登录

首页 / 软件开发 / JAVA / java winform开发:JTable详解

java winform开发:JTable详解2014-08-17列表在任何一门开发语言中都占有非常重要的地位,在.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){@Overridepublic 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);}