私の目標は、JTable を使用してデータベースからデータを表示することです。
コードの参照元: ResultSet から JTable を設定する最も単純なコード
状況に合わせてコードを修正しました。次のメソッドを持つクラス TopicData があります。
public DefaultTableModel buildTableModel(){
//open connection
ResultSet rs = null;
Vector<String> columnNames = new Vector<String>();
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
int columnCount = 0;
DBController db = new DBController();
db.setUp("myDatabase");
String dbQuery = "SELECT topicName, topicDate, topicCategory, topicUser FROM topicTable ORDER BY topicDate";
rs = db.readRequest(dbQuery);
try{
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//close connection
db.terminate();
return new DefaultTableModel(data, columnNames);
}
そして、別のクラス TopicView で:
private JTable getTable() {
if (table == null) {
TopicData topic= new TopicData();
table = new JTable(topic.buildTableModel());
table.setShowGrid(false);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setBounds(95, 59, 625, 357);
}
return table;
}
テーブルの各列の上部にヘッダーがないことに気付きました。 http://i.stack.imgur.com/FcnHb.png
そこで、トラブルシューティングのために TopicData を単純化しました。
public DefaultTableModel testTableModel(){
Vector<String> columnNames = new Vector<String>();
columnNames.add("test1");
columnNames.add("test1");
columnNames.add("test1");
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
Vector<Object>vector = new Vector<Object>();
vector.add("test2");
vector.add("test2");
vector.add("test2");
data.add(vector);
return new DefaultTableModel(data, columnNames);
}
繰り返しますが、テーブルにはヘッダーがありません。「test1」という単語はテーブルのどこにも表示されませんが、「test2」の列が 3 つ表示されます。
私はこれに本当に困惑しています。