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

标签 java swing

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

有人可以指导我满足这个要求吗?谢谢

最佳答案

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

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

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

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

您的代码可能如下所示:

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]
    }
}

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

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

关于java - 如何通过动态数组或 ArrayList 使用数据库中的值填充 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13561137/

相关文章:

java - Spring Boot,禁用测试安全性

java - Guice 构造函数注入(inject) String 依赖项(或其他未绑定(bind)的原语)?

java - 使用 for 循环将 JPanel 添加到 JFrame

java - JScrollPane 无法正常工作

java - 尝试从 SwingWorker done() 方法绘制 JPanel 什么都不做

java - 在 Java 中将文件值读取到文本区域

java - 将 url 分配给 Java EE 项目中的 ajax (js) 函数

java - 如何直接从 Windows CMD 向我的程序发送命令?

java - 切换到新窗口

java - JEdi​​torPane 和自定义编辑器套件