JTable
データの更新に苦労しています。
私は、テーブルデータが読み取られる場所からを構築するためにそれを受け取り、処理するメソッドを使用して、TableModel
から拡張する独自のを実装しています。javax.swing.table.AbstractTableModel
java.util.ArrayList<>
Object[][]
ロジックは次のとおりです。
いくつかのレコードキーを使用してJListを実装しています。ユーザーがレコードキーを選択すると、キーを取得してMySQLデータベースにクエリを実行し、そのキーに関連するレコードをフェッチするメソッドが起動されます。最終結果は、データを構築するためにTableModelに渡したArrayList <>であり、それをテーブルに設定します。
正常に動作しますが、数回ヒットするとテーブルデータの表示が停止し、しばらくすると再び動作を開始します。テーブルまたはGUI全体の更新に問題があるかどうかはわかりません。
これはコードの抜粋です:
テーブルのデータを作成する方法:
public void createTableData(java.util.ArrayList<Lote> alLote) {
//Lote is an entity class modeling the database table.
TABLE_DATA = new Object[alLote.size()][TABLE_COLUMNS.length];
//TABLE_DATA is an Object array, TABLE_COLUMNS is a String[] containing the names of the columns.
int i = 0;
for (Lote element : alLote) {
int j = 0;
TABLE_DATA[i][j++] = element.getFirstColumnValue();
//and so son
i++;
}
super.fireTableDataChanged();
}
GUIを起動すると、空のArrayList<>で始まります。
LoteTableModel ltm = new LoteTableModel();
arrayList = new ArrayList<Lote>();
ltm.createTableData(arrayList);
myTable = new JTable();
myTable.setModel(ltm);
scrollPane = new JScrollPane(myTable);
私はDesignGridLayoutbtwを使用しています。これは、テーブルにレコードがない場合は非表示にし、結果がある場合は表示するRowGroupであり、テーブルコンテナーとしてJScrollPaneを使用しています。
dgl = new DesignGridLayout(panel);
dgl.row().center().group(group).add(scrollPaneContainingTable).fill();
centerPanel.add(panel, BorderLayout.CENTER);
getContentPane().add(centerPanel);
centerPanel.setVisible(true);
次に、ユーザーがJListからアイテムを選択するたびに、データベースにクエリを実行し、選択した値に関連するレコードをフェッチします。
public void listSelectionChanged() {
bloque = alBloque.get(listBloque.getSelectedIndex());
//bloque is another entity, alBloque is an ArrayList<Bloque> from which the JList (named listBloque) ListModel is constructed.
try {
//database query here, omitted
if (result.getStatus() == SUCCESS) {
//the query returned a populated ArrayList<Lote>
alLote = result.getArray();
((LoteTableModel) myTable.getModel()).createTableData(alLote);
myTable.revalidate();
}
} catch (Exception e) {}
}
前に述べたように、リストの値をクリックするとテーブルに関連するレコードが表示されますが、いくつかクリックするとデータの表示がまったく停止します。しばらくそのままにしてからもう一度値をクリックすると、正しいデータが再び表示されるので、前に言ったように、GUIの更新の問題のようなものかどうかはわかりません。
どんな助けでも大歓迎です。