カスタムAbstractTableModel
,TableCellEditor
およびDefaultTableCellRenderer
を作成する必要がある最初のJTableを作成しています。以前はこれらを作成する必要がなかったので、テーブルを必要に応じて動作させるためにいくつかの重要な進歩を遂げました。JTableセルのImageIconを更新します
しかし、私はオーバーライドしているさまざまな方法すべてに圧倒され、特定のセルのImageIconを変更する方法を見つけようとしている私の車輪を回転させています。 セルには、ImageIcon
とテキスト文字列の両方が必要なため、JLabelが含まれている必要があります。私はすでにImageIcon
の初期値を設定することができますが(間違っているかもしれませんが)、更新されたImageIcon
を設定することはできません。何も失敗はしませんが、変更はありません。
JTable
のJLabel
セルにアイコンを取得して設定する最も良い方法は、これらのモデル、エディタ、およびレンダラーのすべてが既にインスタンス化されているとします。
あなたの疑問に思うのであれば、私のモデルはすでにJLabel.class
を返すように定義されています。変更が行われたらfireTableCellUpdated(row, col)
とします。アップデート前とアップデート後にSystem.out.println(getIcon())
を実行すると、ソースが変更されたことがわかります。
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
setIconAt(...)メソッドは決してgetTableCellRenderer(...)を呼び出すべきではありません。これは適切な解決策ではないため、まだ問題が残っています。あなたが常にあなたが掲示したコードで定義されていないimgGrayアイコンになるように割り当てるので、すべてのセルについて同じアイコンが表示されます。すべてのセルに異なるアイコンが必要な場合は、アイコンをモデルに保存する必要があります。早く簡単な解決策を教えてくれました。 – camickr