1

我正在学习如何在 Swing 中使用 JTables。我已经想出连接到数据库并检索结果集。我还可以使用第一个选项显示数据(见下文)。

a) 我想确保我理解使用/传递 TableModel 与直接传递行和列的想法是能够使用 AbstractTableModel 中可用的内置方法;DefaultTableModel 和 ListTableModel 类。

b) 什么是自定义 TableModel?

到目前为止,我遇到了 4 种方式:

  1. 将列和行作为对象直接传递给 JTable 构造函数。

前任:

JTable tab = new JTable(Object [][] rows, Object[] cols);

2. 从实现 AbstractTableModel 的类创建表模型。

前任:

MyModel model = new MyModel(Object[][] obj1, String[] header);

//MyModel is a class that extends AbstractTableModel. 
//MyModel has an ArrayList<Object[]> to store obj1[]
//MyModel implements getRowCount(), getColumnCount() and 
getValueAt(int rowIndex, int columnIndex) and also getColumnName(int index)

JTable tab = new JTable(model);

3.从实现 DefaultTableModel 的类创建表模型。

前任:

DefaultTableModel model = new DefaultTableModel(String data[][],String col[]);
(or)
DefaultTableModel model = DefaultTableModel(Vector data, Vector columnNames) 

JTable table = new JTable(model);

4.ListTableModel

4

1 回答 1

3

当您直接传递数据时,JTable 将在内部创建一个 DefaultTableModel,您可以通过调用table.getModel().

不同的 TableModel 具有不同的功能,您可以通过创建实现 TableModel 或扩展 AbstractTableModel(或 DefaultTableModel)的类来实现自己的功能。这背后的想法是,您有时需要的不仅仅是原始表数据。

例如,如果您想将一个对象附加到每一行:您可以编写一个 TableModel,它每行保存一个对象并提供类似Object getObject(int rowIndex)和的方法void setObject(int rowIndex, Object object)。为此,您将在 TableModel 中保存一个额外的数组或列表,其中包含对象并且始终与行数具有相同的大小。

另一个原因可能是表格模型在您滚动时加载行数据,或者您希望动态显示来自多个数据源的数据。

TableModel 不一定要保存数据,它只是将数据提供给 JTable。

于 2012-11-14T00:03:40.447 回答