我正在学习如何在Swing中使用JTable。我已经想出要连接到数据库并检索结果集。我也可以使用第一个选项显示数据(见下文)。
a)我想确保我理解使用/传递TableModel与直接传递行和列的想法是能够使用AbstractTableModel中可用的内置方法; DefaultTableModel和ListTableModel类。
b)什么是自定义TableModel?
到目前为止,我遇到过4种方式:
前:
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
答案 0 :(得分:3)
当您直接传递数据时,JTable将在内部创建一个DefaultTableModel,您可以通过调用table.getModel()
来获取。
不同的TableModel具有不同的功能,您可以通过创建实现TableModel的类或扩展AbstractTableModel(或DefaultTableModel)来实现自己的功能。这背后的想法是,您有时需要的不仅仅是原始表数据。
例如,如果要将Object附加到每一行:
您可以编写一个TableModel,每行包含一个对象,并提供Object getObject(int rowIndex)
和void setObject(int rowIndex, Object object)
等方法。
为此,您将在TableModel中包含一个包含对象的额外数组或列表,并且总是与行数相同。
另一个原因可能是tablemodel在您滚动时加载行数据,或者您希望动态显示来自多个数据源的数据。
TableModel不一定必须保存数据,它只是将它提供给JTable。