我正在創建我的第一個JTable,它需要我創建自定義AbstractTableModel
,TableCellEditor
和DefaultTableCellRenderer
。鑑於我之前不需要創建這些工具,我已經取得了一些重大進展,使我的表能夠按照預期行事。更新JTable單元格的ImageIcon
但是,我不知所措地使用了所有不同的方法,而且我正在旋轉我的輪子,試圖弄清楚如何修改特定單元格的ImageIcon。 單元格必須包含JLabel,因爲它需要ImageIcon
以及文本字符串。我已經可以設置初始ImageIcon
(雖然我可能做得不正確),但我無法設置更新的ImageIcon
。沒有任何失敗,但沒有改變。
從一般意義上說,假設所有這些模型,編輯器和渲染器都已經實例化,獲取和設置圖標到JTable
的JLabel
單元格的最佳方法是什麼?
我的模型已被定義爲返回JLabel.class
這些單元格,如果您想知道,並且我也會在做出更改後執行fireTableCellUpdated(row, col)
。如果我在更新前後執行System.out.println(getIcon())
,我甚至可以看到源已更改。
下面是一些代碼(與地方URL/ImageIcon的修復更新)的:
class MonitorTable extends JTable {
MonitorTableModel model = new MonitorTableModel(rows, columnNames);
setModel(model);
...
public void setIconAt(ImageIcon icon, int row, int col) {
model.setIconAt(icon, row, col);
} // End setIconAt(ImageIcon, int, int)
...
class MonitorTableModel extends AbstractTableModel {
...
public void setIconAt(ImageIcon icon, int row, int col) {
StatusTableCellRenderer cell =
(StatusTableCellRenderer)getColumnModel().getColumn(col).getCellRenderer().
getTableCellRendererComponent(myTableObject, null, false, false, row, col);
System.out.println(cell.getIcon()); // Shows initial icon source
cell.setIcon(icon);
fireTableCellUpdated(row, col); // Should update the table
System.out.println(cell.getIcon()); // Shows new icon source
System.out.println("Cell updated");
} // End setIconAt(ImageIcon, int, int)
} // End class MonitorTableModel
public class StatusTableCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
setIcon(imgGray);
setText((String)value);
return this;
} // End getTableCellRendererComponent(JTable, Object, boolean, boolean, int, int)
} // End class StatusTableCellRenderer
} // End class MonitorTable
我已經觸發`fireTableCellUpdated(row,col)`。我會更多地更新我的問題。 – 2011-01-19 20:17:44
嘗試重繪JLabel – 2011-01-19 20:20:35
我試過了,沒有改變。無論如何``fireTableCellUpdated(row,col)`應該照顧。難怪我以前從來沒有搞錯過JTables!哎呀! – 2011-01-19 20:23:10