のオブジェクトから動的に作成するJTable
があります。私はこれをおそらく完全に間違っているが、うまくいく。私が働くことができない唯一のことは、いくつかの細胞に画像を追加することです。ダイナミックに作成されたJTableに画像を追加する方法
すべてのことは、ImageIcon
オブジェクト名をStringとしてセルに追加することです。以下の私のコードを見てください。あなたがここにあなたのテーブルのための
をレンダラをインストールする必要が
private static Image doneImage = getIconImage("doneImage");
private static Image notDoneImage = getIconImage("notDoneImage");
private DefaultTableModel model = new DefaultTableModel(){
@Override
public Class<?> getColumnClass(int column){
if ((column & 1) != 0){
return ImageIcon.class;
}else{
return String.class;
}
}
};
initTables();
JTable table = new JTable();
table.setModel(model);
private void initTables(){
model.addRow(new Object[]{});
int rowsToAdd = 0;
int rowCount = 0;
int columnId = 0;
for(HouseObject aHouse : houses){
for(RoomObject aRoom : aHouse.getRooms()){
model.addColumn(null);
model.addColumn(aRoom.getId());
model.setValueAt(aRoom.getId(), 0, columnId);
if (rowCount < aRoom.getEvents().size()){
rowsToAdd = aRoom.getEvents().size() - model.getRowCount();
for(int i = 0; i <= rowsToAdd; i++){
model.addRow(new Object[]{});
}
rowCount = model.getRowCount();
}
for(int i = 0; i < aRoom.getEvents().size(); i++){
model.setValueAt(aRoom.getEvents().get(i).getId(), i+1, columnId);
for(String houseDone : housesDone){
if(aRoom.getEvents().get(i).getId().contains(houseDone)){
model.setValueAt(doneImage , i+1, columnId+1); // this does not work
}else{
model.setValueAt(notDoneImage, i+1, columnId+1);
}
}
}
columnId = columnId+2;
}
}
}
これは機能します。私はすでにフォントの色のセルレンダラーを持っていましたが、 'setValue()'をオーバーライドする必要がありません。ありがとうございました! – omnomnom
@omnomnomカスタムレンダラーは必要ありません。あなたがする必要があるのは "Icon.class"を返すだけで、テーブルはデフォルトのIconレンダラーを使用します。テーブルは、LAFごとに異なる(またはそうでない)デフォルトのレンダラーを使用します。本当に必要な場合を除き、レンダラーを作成しないでください。 – camickr