私が取り組んでいるプログラムには、GUI と DatabaseHelper の 2 つのクラスが含まれています。使用されるテーブル モデルは DefaultTableModel です。
GUI には、単純な JTable が含まれています。起動時に DatabaseHelper からのデータで初期化されます。これは機能します。
ただし、新しいデータをテーブルにロードしようとすると、それほど単純ではありません。
これまでの私のアプローチは次のとおりです。
model = DatabaseHelper.LoadData() // returns a default table model with new data.
tabel = new JTable();
tabel.setModel();
これで、ロードされたデータが既存の JTable に追加されます。
可能であれば、デフォルトのテーブル モデルのみを使用してソリューションを実装したいと考えています。ご提案ありがとうございます。
編集:
public void initGUI(){
setJMenuBar(makeMenuBar());
container = new JPanel(new BorderLayout());
model = db.initialiseTable(); // Load initialisation data from the database
table = new JTable();
table.setModel(model);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
scrollPane = new JScrollPane(table);
container.add(scrollPane, BorderLayout.CENTER);
add(container);
}
データベースから新しいモデルを返す:
public DefaultTableModel loadData(){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/version1", "root", "root");
System.out.println("\nDatabase Connection Established.\n");
String query = "SELECT * FROM table WHERE test_number = 2";
stmt = con.createStatement();
rs = stmt.executeQuery( query );
md = rs.getMetaData();
columns = md.getColumnCount();
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <=columns-1; i++){
row.addElement( rs.getObject(i+1) );
}
data.addElement( row );
}
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
columnNames.add(" ");
columnNames.add("Column 1");
columnNames.add("Column 2");
DefaultTableModel model = new DefaultTableModel(data, columnNames);
return model;
}
ActionPerformed、コードは DatabaseHelper から返された新しいモデルを処理します
model = new DefaultTableModel();
model = db.loadData();
table = new JTable();
table.setModel(model);