我正在创建我的第一个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