JTable略解

 

javax.swing
类 JTable

java.lang.Object
  java.awt.Component
      java.awt.Container
          javax.swing.JComponent
              javax.swing.JTable

     常用构造方法:

 

JTable()
          构造一个默认的 JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。
JTable(int numRows, int numColumns)
          使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable

JTable(TableModel dm)
          构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。

 

我觉得最后一种构造方法最好,原因其实很简单,就因为这个构造方法可以让自己定义的JTable类对象有更多的功能

 

关于TableModel:

 

 void addTableModelListener(TableModelListener l)
          每当数据模型发生更改时,就将一个侦听器添加到被通知的列表中。
 Class<?> getColumnClass(int columnIndex)
          针对列中所有的单元格值,返回最具体的超类。
 int getColumnCount()
          返回该模型中的列数。
 String getColumnName(int columnIndex)
          返回 columnIndex 位置的列的名称。
 int getRowCount()
          返回该模型中的行数。
 Object getValueAt(int rowIndex, int columnIndex)
          返回 columnIndexrowIndex 位置的单元格值。
 boolean isCellEditable(int rowIndex, int columnIndex)
          如果 rowIndexcolumnIndex 位置的单元格是可编辑的,则返回 true。
 void removeTableModelListener(TableModelListener l)
          每当数据模型发生更改时,就从被通知的列表中移除一个侦听器。
 void setValueAt(Object aValue, int rowIndex, int columnIndex)
          将 columnIndexrowIndex 位置的单元格中的值设置为 aValue

TableModel是一个接口,所以要使用它的话得全部实现其方法。

我们更常用的是TableModel的一个实现类AbstractTableModel,需要的方法只需从写即可。

 

如果table太大的话,我们可以把JTable对象放在一个JScrollPane里。

 

JTable的getColumnName方法可以设置表头信息,但有一个有趣的现象:表头信息在将JTable对象放在JScrollPane里才能显示(当然该有其他的方法让表头信息显示,但会复杂)。如果不做处理的话,表头信息是看不到的。

 

在做服务端的时候,我们需要一个表格(JTable)来将客户端信息表示出来,但是,要实现“一个客户端上线,表格增加一条记录”的功能,那么可以用这样的方法:

     在TableModel里定义一个int row记录行数。

     然后定义一个方法addRow()用来增加一行。

 但之中有几点要注意的:
   1.用JTable显示客户端信息的时候,要用一个队列保存所有客户端的信息,然后再setValueAt方法里用

public Object getValueAt(int rowIndex, int columnIndex) {
		// 第几行,就是列表中的第几个UserInfo对象
		if (ChatTools.userInfoList.size() == 0) {
			return null;
		}
		if (rowIndex < ChatTools.userInfoList.size()) {
			UserInfo user = ChatTools.userInfoList.get(rowIndex);
			if (columnIndex == 0) {
				return user.getName();

			}
			if (columnIndex == 1) {
				return user.getPwd();
			} else {
				return "出错!";
			}
		}
		return null;
	}

 

这样就可以将所有客户端的信息显示到表格上。

 

   也许,有一个细节我们会忘记,那就是刷新表格,我尝试了很多种方法,最后管用的只有updateUI()方法,推荐使用。

 

  当然还可以给表格添加监听,这就不扯了,又到事件监听方面了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值