table包河AbstractTableModel抽象类

本文档介绍Java Swing的javax.swing.table包,重点在于AbstractTableModel类。这个抽象类为TableModel接口提供默认实现,适合创建自定义表格模型。开发者需要实现几个关键方法,如getColumnName、getColumnClass、isCellEditable和setValueAt,以控制表格数据的构造、更新和呈现。此外,还讨论了事件监听的相关方法。
摘要由CSDN通过智能技术生成

软件包 javax.swing.table

提供用于处理 javax.swing.JTable 的类和接口。

请参见:
描述

接口摘要
TableCellEditor此接口定义了要成为组件(如 JListBoxJComboBoxJTreeJTable)的值编辑器的任意对象需要实现的方法。
TableCellRenderer此接口定义了要成为 JTable 中单元格渲染器的任意对象所需的方法。
TableColumnModel定义了适合用于 JTable 的表列模型对象的要求。
TableModelTableModel 接口指定了 JTable 用于询问表格式数据模型的方法。

类摘要
AbstractTableModel此抽象类为 TableModel 接口中的大多数方法提供默认实现。
DefaultTableCellRenderer呈现(显示) JTable 中每个单元格的标准类。
DefaultTableCellRenderer.UIResourceDefaultTableCellRenderer 的一个子类,它实现 UIResource
DefaultTableColumnModelJTable 的标准列处理程序。
DefaultTableModel这是 TableModel 的一个实现,它使用一个 Vector 来存储单元格的值对象,该 Vector 由多个 Vector 组成。
JTableHeader这是管理 JTable 的头的对象。
TableColumnTableColumn 表示 JTable 中列的所有属性,如宽度、大小可调整性、最小和最大宽度。
TableRowSorter<M extends TableModel>RowSorter 的一个实现,它使用 TableModel 提供排序和过滤操作。
TableStringConverterTableStringConverter 用于将对象从模型转换为字符串。

软件包 javax.swing.table 的描述

提供用于处理 javax.swing.JTable 的类和接口。JTable 是 Swing 的网格或表格视图,用于为应用程序内的表格数据结构构造用户界面。如果您想控制如何构造、更新和呈现这些表,以及如何显示和管理与该表关联的数据,请使用此包。

注:大多数 Swing API 都不是 线程安全的。有关细节,请参阅 The Java Tutorial 中的 Threads and Swing 一节。

相关文档

有关概述、教程、示例、指南和工具文档的信息,请参阅:




javax.swing.table
AbstractTableModel

java.lang.Object
  继承者 javax.swing.table.AbstractTableModel
所有已实现的接口:
Serializable, TableModel
直接已知子类:
DefaultTableModel

public abstract class AbstractTableModel
   
   
    
    extends 
    
    Object
   
   
   
   
    
    implements 
    
    TableModel, 
    
    Serializable
   
   
 

此抽象类为 TableModel 接口中的大多数方法提供默认实现。它负责管理侦听器,并为生成 TableModelEvents 以及将其调度到侦听器提供方便。要创建一个具体的 TableModel 作为 AbstractTableModel 的子类,只需提供对以下三个方法的实现:

  public int getRowCount();
  public int getColumnCount();
  public Object getValueAt(int row, int column);
  

警告:此类的已序列化对象与以后的 Swing 版本不兼容。当前的序列化支持适用于短期存储或运行相同 Swing 版本的应用程序之间的 RMI。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder


字段摘要
protected EventListenerListlistenerList
侦听器的列表
构造方法摘要
AbstractTableModel()
方法摘要
voidaddTableModelListener(TableModelListener l)
每次数据模型发生更改时,就向被通知的列表添加一个侦听器。
intfindColumn(String columnName)
返回具有给定名称的列。
voidfireTableCellUpdated(int row, int column)
通知所有侦听器,已更新 [row, column] 处的单元格值。
voidfireTableChanged(TableModelEvent e)
将给定的通知事件转发到所有将自身注册为此表模型的侦听器的 TableModelListeners
voidfireTableDataChanged()
通知所有侦听器,表的所有行单元格值可能已更改。
voidfireTableRowsDeleted(int firstRow, int lastRow)
通知所有侦听器,已删除范围在 [firstRow, lastRow](包括)的行。
voidfireTableRowsInserted(int firstRow, int lastRow)
通知所有侦听器,已插入范围在 [firstRow, lastRow](包括)的行。
voidfireTableRowsUpdated(int firstRow, int lastRow)
通知所有侦听器,已更新范围在 [firstRow, lastRow](包括)的行。
voidfireTableStructureChanged()
通知所有侦听器,表的结构已更改。
Class<?>getColumnClass(int columnIndex)
返回 Object.class 而不管 columnIndex 是多少。
StringgetColumnName(int column)
返回列默认名称,其中列使用以下工作表约定:A、B、C……Z、AA、AB 等等。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
返回一个包含当前注册为此 AbstractTableModel 上的 FooListener 的所有对象的数组。
TableModelListener[]getTableModelListeners()
返回一个包含在此模型上注册的所有表模型侦听器的数组。
booleanisCellEditable(int rowIndex, int columnIndex)
返回 false。
voidremoveTableModelListener(TableModelListener l)
每次数据模型发生更改时,就从被通知的列表移除一个侦听器。
voidsetValueAt(Object aValue, int rowIndex, int columnIndex)
由于提供了此空实现,因此,如果用户的数据模型是不可编辑的,则他们不必实现此方法。
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

从接口 javax.swing.table.TableModel 继承的方法
getColumnCount, getRowCount, getValueAt

字段详细信息

listenerList

protected EventListenerList listenerList
侦听器的列表

构造方法详细信息

AbstractTableModel

public AbstractTableModel()
方法详细信息

getColumnName

public String getColumnName(int column)
返回列默认名称,其中列使用以下工作表约定:A、B、C……Z、AA、AB 等等。如果无法找到 column,则返回一个空字符串。

指定者:
接口 TableModel 中的 getColumnName
参数:
column - 被查询的列
返回:
包含 column 默认名称的字符串

findColumn

public int findColumn(String columnName)
返回具有给定名称的列。由于实现是未用过的,因此,如果经常调用此方法,则应该重写此方法。此方法不在 TableModel 接口中,也不被 JTable 使用。

参数:
columnName - 包含要查找的列名称的字符串
返回:
名称为 columnName 的列,如果未找到该列,则返回 -1

getColumnClass

public Class<?> getColumnClass(int columnIndex)
返回 Object.class 而不管 columnIndex 是多少。

指定者:
接口 TableModel 中的 getColumnClass
参数:
columnIndex - 被查询的列
返回:
Object.class

isCellEditable

public boolean isCellEditable(int rowIndex,
                              int columnIndex)
返回 false。这是所有单元格的默认实现。

指定者:
接口 TableModel 中的 isCellEditable
参数:
rowIndex - 被查询的行
columnIndex - 被查询的列
返回:
false
另请参见:
TableModel.setValueAt(java.lang.Object, int, int)

setValueAt

public void setValueAt(Object aValue,
                       int rowIndex,
                       int columnIndex)
由于提供了此空实现,因此,如果用户的数据模型是不可编辑的,则他们不必实现此方法。

指定者:
接口 TableModel 中的 setValueAt
参数:
aValue - 要分配给单元格的值
rowIndex - 单元格所在行
columnIndex - 单元格所在列
另请参见:
TableModel.getValueAt(int, int), TableModel.isCellEditable(int, int)

addTableModelListener

public void addTableModelListener(TableModelListener l)
每次数据模型发生更改时,就向被通知的列表添加一个侦听器。

指定者:
接口 TableModel 中的 addTableModelListener
参数:
l - TableModelListener

removeTableModelListener

public void removeTableModelListener(TableModelListener l)
每次数据模型发生更改时,就从被通知的列表移除一个侦听器。

指定者:
接口 TableModel 中的 removeTableModelListener
参数:
l - TableModelListener

getTableModelListeners

public TableModelListener[] getTableModelListeners()
返回一个包含在此模型上注册的所有表模型侦听器的数组。

返回:
此模型的所有 TableModelListener,如果当前没有已注册的表模型侦听器,则返回一个空数组
从以下版本开始:
1.4
另请参见:
addTableModelListener(javax.swing.event.TableModelListener), removeTableModelListener(javax.swing.event.TableModelListener)

fireTableDataChanged

public void fireTableDataChanged()
通知所有侦听器,表的所有行单元格值可能已更改。行数也可能已更改,并且 JTable 应该从头开始重新绘制该表。假定表的结构(如同列的顺序)是相同的。

另请参见:
TableModelEvent, EventListenerList, JTable.tableChanged(TableModelEvent)

fireTableStructureChanged

public void fireTableStructureChanged()
通知所有侦听器,表的结构已更改。表中的列数,新列的名称和类型可能与以前的状态不同。如果 JTable 接收此事件,并且设置了其 autoCreateColumnsFromModel 标志,则它丢弃之前具有的所有表列,并按列在模型中出现的顺序重新分配默认列。这与对 JTable 调用 setModel(TableModel) 具有相同的效果。

另请参见:
TableModelEvent, EventListenerList

fireTableRowsInserted

public void fireTableRowsInserted(int firstRow,
                                  int lastRow)
通知所有侦听器,已插入范围在 [firstRow, lastRow](包括)的行。

参数:
firstRow - 第一行
lastRow - 最后一行
另请参见:
TableModelEvent, EventListenerList

fireTableRowsUpdated

public void fireTableRowsUpdated(int firstRow,
                                 int lastRow)
通知所有侦听器,已更新范围在 [firstRow, lastRow](包括)的行。

参数:
firstRow - 第一行
lastRow - 最后一行
另请参见:
TableModelEvent, EventListenerList

fireTableRowsDeleted

public void fireTableRowsDeleted(int firstRow,
                                 int lastRow)
通知所有侦听器,已删除范围在 [firstRow, lastRow](包括)的行。

参数:
firstRow - 第一行
lastRow - 最后一行
另请参见:
TableModelEvent, EventListenerList

fireTableCellUpdated

public void fireTableCellUpdated(int row,
                                 int column)
通知所有侦听器,已更新 [row, column] 处的单元格值。

参数:
row - 已更新的单元格所在行
column - 已更新的单元格所在列
另请参见:
TableModelEvent, EventListenerList

fireTableChanged

public void fireTableChanged(TableModelEvent e)
将给定的通知事件转发到所有将自身注册为此表模型的侦听器的 TableModelListeners

参数:
e - 要转发的事件
另请参见:
addTableModelListener(javax.swing.event.TableModelListener), TableModelEvent, EventListenerList

getListeners

public <T extends EventListener> T[] getListeners(Class<T> listenerType)
返回一个包含当前注册为此 AbstractTableModel 上的 FooListener 的所有对象的数组。 FooListener 是用 addFooListener 方法注册的。

可以使用 class 字面值(如 FooListener.class)来指定 listenerType 参数。例如,可以通过以下代码查询模型 m,以获得其表模型侦听器:

TableModelListener[] tmls = (TableModelListener[])(m.getListeners(TableModelListener.class));
如果不存在这样的侦听器,则此方法将返回一个空数组。

参数:
listenerType - 所请求侦听器的类型;此参数应该指定一个从 java.util.EventListener 继承的接口
返回:
在此组件上注册为 FooListener 的所有对象组成的数组,如果没有添加这样的侦听器,则返回一个空数组
抛出:
ClassCastException - 如果 listenerType 没有指定实现 java.util.EventListener 的类或接口
从以下版本开始:
1.3
另请参见:
getTableModelListeners()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 AbstractTableModel 构建Table 在表格中添加JButton按钮,之前在网上找了2天没有找到好用的程序,最终终于找到一个好用的例子。 不要使,我退你们分。。 sing the Swing JTable class can quickly become a sticky business when you want to customize it to your specific needs. First you must become familiar with how the JTable class is organized. Individual cells are rendered by TableCellRenderer implementations. The table contents are represented by an implementation of the TableModel interface. By default, JTable uses DefaultTableCellRenderer to draw its cells. DefaultTableCellRenderer recognizes a few primitive types, rendering them as strings, and can even display Boolean types as checkboxes. But it defaults to displaying the value returned by toString() for types it does not specifically handle. You have to provide your own TableCellRenderer implementation if you want to display buttons in a JTable. The TableCellRenderer interface contains only one method, getTableCellRendererComponent(...), which returns a java.awt.Component that knows how to draw the contents of a specific cell. Usually, getTableCellRendererComponent() will return the same component for every cell of a column, to avoid the unnecessary use of extra memory. But when the contents of a cell is itself a component, it is all right to return that component as the renderer. Therefore, the first step towards having JButtons display correctly in a JTable is to create a TableCellRenderer implementation that returns the JButton contained in the cell being rendered. In the accompanying code listing, JTableButtonRenderer demonstrates how to do this. Even after creating a custom TableCellRenderer, you're still not done. The TableModel associated with a given JTable does not only keep track of the contents of each cell, but it also keeps track of the class of data stored in each column. DefaultTableModel is designed to work with DefaultTableCellRenderer and will return java.lang.String.class for columns containing data types that it does not specifically handle. The exact method that does this is getColumnClass(int column). Your second step is to create a TableModel implementation that returns JButton.class for cells that contain JButtons. JTableButtonModel shows one way to do this. It just returns the result of getClass() for each piece of cell data. At this point, you're almost done, but not quite. What's the use of putting a JButton in a JTable if you can't press the darn thing? By default, JTable will not forward mouse events to components contained in its cells. If you want to be able to press the buttons you add to JTable, you have to create your own MouseListener that forwards events to the JButton cells. JTableButtonMouseListener demonstrates how you could do this.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值