如何通过动态数组或ArrayList使用数据库中的值填充JTable

时间:2012-11-26 08:31:13

标签: java swing

我在数据库中有6列,最多约20行。我喜欢在Java中创建一个用这些值填充JTable的通用程序。我非常熟悉使用动态数组,但不熟悉Swing中的JTable属性和模型。

有人可以根据要求在这里指导我吗?谢谢

3 个答案:

答案 0 :(得分:2)

您必须创建自己的表模型。请参阅此处的API文档:http://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html

基本上,getColumnCount()将返回您的列数,getRowCount()数据库中的行数,getColumnName(int columnIndex)每列的名称(数据库中的列名称或任意值)名称,可能来自一个常量字符串数组)。在简单的情况下,getColumnClass(int columnIndex)可以为每列返回String.class。然后你必须将每个值转换为字符串。

getValueAt(int rowIndex, int columnIndex)必须从给定行和列的数据库返回值。你可能应该在2D数组或类似的东西中预加载所有这些值(但这将是另一个问题的答案;))。

您现在可以忽略其他方法,它们适用于可编辑的表格。

您的代码可能如下所示:

String[][] tableData = readTableDataFromDatabase();
String columnNames = initColumnNames(); //From DB or constants
TableModel model = new DbTableModel(tableData, columnNames);

class DbTableModel extends AbstractTableModel {
    private String[][] tableData;
    private String[] columnNames;

    public DbTableModel(String[][] tableData, columnNames) {
        this.tableData = tableData;
        this.columnNames = columnNames;
    }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return tableData[rowIndex][columnIndex];
    }
    @Override
    public int getRowCount() {
        return tableData.length;
    }
    @Override
    public int getColumnCount() {
        if(tableData.length == 0)
            return 0;
        return tableData[0].length;
    }
    @Override
    public String getColumnName(int column) {
        return columnNames[column]
    }
}

此示例假定您将数据库中的数据作为2D数组读取。如果您使用我强烈推荐的O / R-Mapper(如Java Persistence API - JPA),您可能会加载实体列表。每个实体都包含表行的数据。无论如何,表格模型不会有太大变化。您将从列表中获取实体对象而不是访问数组值,并调用“get” - 实体上的方法。

Java教程中有更多信息:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data

答案 1 :(得分:0)

答案 2 :(得分:0)

很好,但我希望readTableDataFromDatabase();返回结果集对象