我在数据库中有 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)
每列的一些名称(数据库中的列名或任意名称,可能来自常量字符串数组)。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]
}
}
此示例假设您将数据库中的数据作为 2D 数组读取。如果您使用我强烈推荐的 O/R-Mapper(如 Java Persistence API - JPA),您可能会加载一个实体列表。每个实体将包含表行的数据。无论如何,表模型不会有太大变化。您将从列表中获取实体对象并调用get
实体上的“”-Methods,而不是访问数组值。
Java 教程中有更多信息:http: //docs.oracle.com/javase/tutorial/uiswing/components/table.html#data
看看这里的教程:http: //docs.oracle.com/javase/tutorial/uiswing/components/table.html#data
这是我前段时间编写的基于列表的只读 TableModel 示例:
很好,但我希望 readTableDataFromDatabase(); 返回结果集对象