Ich habe eine JTable
, die ich dynamisch von List<String>
Objekte erstellen. Ich mache das wahrscheinlich völlig falsch, aber es funktioniert. Das einzige, was ich nicht zur Arbeit bringen kann, ist das Hinzufügen von Bildern zu einigen der Zellen.So fügen Sie Bilder zu einer dynamisch erstellten JTable hinzu
Alles, was es tut, ist die ImageIcon
Objektname als String zu den Zellen hinzugefügt. Siehe meinen Code unten.
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;
}
}
}
Das funktioniert. Ich hatte bereits einen CellRenderer für die Schriftfarbe, aber ich habe nicht verstanden, dass ich 'setValue()' überschreiben muss. Vielen Dank! – omnomnom
@omnomnom, der benutzerdefinierte Renderer ist nicht erforderlich. Alles, was Sie tun müssen, ist "Icon.class" zurückzugeben, und die Tabelle wird ihren Standard-Icon-Renderer verwenden. Die Tabelle verwendet den Standard-Renderer, der für jeden LAF unterschiedlich sein kann (oder auch nicht). Erstellen Sie keinen Renderer, es sei denn, Sie müssen dies wirklich tun. – camickr