So irgendwie stimmt etwas nicht.
Mein code vom AbstractTableModel:
[JAVA=42]
public class FileTableModel extends AbstractTableModel {
public static final int VORSCHAU_COLUMN = 0;
public static final int NAME_COLUMN = 1;
public static final int SIZE_COLUMN = 2;
public static final int FORMAT_COLUMN = 3;
public static final int COLORSPACE_COLUMN = 4;
public static final int DPI_COLUMN = 5;
public static final int BOUNCE_COLUMN = 6;
private String[] columnNames = {"Vorschau", "Name / Pfad", "Größe", "Format", "Farbraum", "DPI", "Abmessugen (mm)"};
private List<StorageElementTransfer> folderFiles = new ArrayList<StorageElementTransfer>();
private Icon preview;
public List<StorageElementTransfer> getFolderFiles() {
return folderFiles;
}
public void setFolderFiles(List<StorageElementTransfer> folderFiles) {
this.folderFiles = folderFiles;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getColumnCount() {
return 7;
}
@Override
public int getRowCount() {
return folderFiles.size();
}
public Icon loadPreview(String type){
if(preview == null){
if("DIR".equals(type)) {
preview = new ImageIcon(getClass().getResource("/de/develop/ui/resources/icons/FolderForTable.png"));
} else if ("IMG".equals(type)) {
//Hier wird später per Socket das Preview vom Server geholt.
preview = new ImageIcon(getClass().getResource("/de/develop/ui/resources/icons/jpeg.png"));
} else {
preview = new ImageIcon(getClass().getResource("/de/develop/ui/resources/icons/FolderForTable.png"));
}
return preview; //load from previewPath
}
return preview;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
StorageElementTransfer ser = folderFiles.get(rowIndex);
switch (columnIndex) {
case VORSCHAU_COLUMN:
return loadPreview(ser.getType());
case NAME_COLUMN:
return ser.getName();
default:
return "";
}
}
}
[/code]
Das prüfen auf if(preview == null) geht hier nicht, weil die Tabelle mehrere Zeilen hat, bei der zweiten Zeile ist preview aber nicht mehr NULL weil es ja schon mal erstellt worden ist.
Wenn ich das so mache ist ein Icon für alle Zeilen gleich, brauche aber Verschiedene Icons für jede Zeile.
Wie mache ich das? Eine HashMap mit vielen Icons drin die per "rowIndex" und "columnIndex" angesteuert werden?
> Einen eigenen IconRenderer brauchst du übrigens nicht, da in JTable schon einer eingebaut ist
Wenn ich das so mache ohne IconRenderer, kriege ich in der Spalte kein Icon sondern ein "file://bla/bla/bla".