だから私はJTable
、列AKを持っています。AとBだけが編集可能です。誰かがAの空の行を編集した場合、 Bを取得するために API 呼び出しを行い、次にBが存在するすべての行を取得するために DB 呼び出しを行います。誰かがBの空の行を編集した場合、同じ呼び出しを行います。その行のDBからも。この呼び出しは 0 ~ N 行を返します。0 行が返された場合、Bを除くすべての行の値を変更しますそれ以外の場合は、データを使用して行に入力します。入力したら、すべての列を編集不可にします。DB 呼び出しは独自のスレッドで発生します。呼び出しが返されると、テーブルモデルに追加する独自のレコード オブジェクトを作成します。
私は、データを保持し、値の変更を処理するために、独自のTableModel
とを持っています。TableModelListener
これが私の問題です。セルレンダラーを使用TableCellRenderer
して値が変更されたかどうかを確認しています。変更されている場合は、呼び出しを行い、必要に応じて入力します。DB から多数の行が取得されている場合、すべてのレコードを読み込んで作成するのに時間がかかるため、画面がフリーズしているだけでなく、進行中であり、どれだけ進んでいるのかをユーザーに示すために a を使用しようとしました。ただし、表示されるフレームは空白で何も表示されません。何かを不適切に行っているか、何かが欠けているように感じます。どんな助けでも大歓迎です。ProgressBar
私が話していることを理解するためのいくつかのコード
public class MyPanel extends JPanel {
private JTable myTable;
private MyTableModel tm;
//OTHER FIELDS
public static void createPanel() {
tm = new MyTableModel(columnnames);
myTable = new JTable(tm);
TableColumn account = myTable.getColumnModel().getColumn(
MyTableModel.ACCOUNT_INDEX);
account.setCellRenderer(new MyTableRenderer(
MyTableModel.ACCOUNT_INDEX));
}
}
public class MyTableRenderer extends DefaultTableCellRenderer{
protected int interactiveColumn;
public MyTableRenderer(int interactiveColumn) {
this.interactiveColumn = interactiveColumn;
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (column == interactiveColumn && hasFocus) {
//DO DB and API CALLS HERE
//IF DB CALL DISPLAY A NEW FRAME WITH PROGRESSBAR
}
return c;
}
}
フォーマットの問題で申し訳ありません