JTable に 2 つのタイプを表示する必要がある列があります: String OR ImageIcon、両方ではありません。その列の各セルには、データを計算する独自のスレッドがあります。最初に、各セルに画像(待機中のロゴなど)を配置し、次に画像を計算されたデータの文字列で置き換えます(追加しません)。デフォルトの TableCell レンダラーを拡張してみましたが、オブジェクトのアドレス(javax.swing.ImageIcon@342...)のように画像を表示し、文字列に置き換えます。別のバリアントで、画像を正しく表示しますが、空の文字列に置き換えます (または表示されませんか?)。
タイプに応じてテーブルがセルの内容を正しく表示するように設定する方法は?
現時点で私が持っているものは次のとおりです。
class IconAndStringRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 3606788739290618405L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (value instanceof Icon) {
setIcon((Icon) value);
setText("");
}
return this;
}
}
Jテーブルは次のとおりです。
テーブル = 新しい JTable(モデル) {
private static final long serialVersionUID = 8058795799817761161L;
public Class<?> getColumnClass(int column) {
if (column == TARGET_COLUMN)
return ImageIcon.class;
else
return super.getColumnClass(column);
}
};
さらにいくつかの質問:
画像の後にテキストを書き込むのではなく、テキストが画像を置き換えるように設定する方法 (表示されていなくても);
文字色の設定方法 setForebackground(Color c) を使うのですが、これを使うと画像が表示されません。
Jlabelで動作させることは可能ですか? セルを変更するスレッドで必要な Jlabel (画像またはテキストを含む) を設定し、setValueAt(ラベル、行、列);