所以我正在使用JTable
,它有列A-K。與A和B是唯一可編輯的。如果有人在編輯一個的空行,我做了一個API調用來獲取乙然後我做一個DB調用以獲得其中乙 exists.If有人在乙編輯一個空行,我做的所有行與該行相同的調用也將從該行的數據庫中檢索。該調用返回0-N行。如果返回0行,我將除B之外的所有行的值更改爲N/A,否則我使用數據填充行。一旦填充,我將使所有列都不可編輯。數據庫調用發生在自己的線程中,因爲一旦調用返回,我創建自己的記錄對象,並添加到表模型中。JTable加載值的變化,加載時顯示進度條
我有我自己的TableModel
和TableModelListener
來保留數據和處理值的變化。
這是我的問題。我正在使用TableCellRenderer
,並使用cellrenderer來查看值是否已更改,如果是,則根據需要進行調用和填充。當從DB中拉出大量行時,需要花費一些時間來加載和製作所有記錄,所以我試圖使用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;
}
}
對不起,格式問題
嗯,我很抱歉,我想我沒有清楚地解釋自己。我正在使用SwingWorker來處理結果集並創建記錄對象。不過,我並沒有將這個記錄對象添加到擺輪工作臺中的表模型中,而是添加到該表格單元格渲染器中。當用戶失去對他剛剛編輯的列的關注時,我想運行我的命令,經過一些Google搜索後,我發現上面的代碼按我的意思去做。是否有一些替代方法可以避免更新可以推薦的更改行 – dsymquen 2012-04-12 00:10:56
您需要一個'CellEditor';更上面。 – trashgod 2012-04-12 00:46:14
謝謝,我知道我的方法不是最好的,這有助於很多。 – dsymquen 2012-04-12 14:47:46