Hallo
Ich habe eine JTable, die dynamisch mit der aktuellen Größe der Tabelle die Anzahl der Spalten und Reihen ändern soll. Jedoch zeigt sie rein gar nichts an, nichtmal die Spalten. Laut Debugging-Ausgaben wird allerdings sowohl für die Spalten als auch die Reihen ein sinnvoller Wert ausgegeben. Ich habe dafür folgendes programmiert:
Dabei gibt er anfangs für rows 1 aus und für Columns ebenso, also sollte es eine Tabelle mit einem Eintrag darstellen. Die Debugging-Meldung "got value at " + rowIndex + " " + columnIndex wird jedoch nie ausgegeben, also dürfte er aus was für gründen auch immer nie die Tabellendaten einlesen. Die Tabelle wird selbstverständlich richtig an die Oberfläche angefügt
Woran könnte dies liegen?
Ich habe eine JTable, die dynamisch mit der aktuellen Größe der Tabelle die Anzahl der Spalten und Reihen ändern soll. Jedoch zeigt sie rein gar nichts an, nichtmal die Spalten. Laut Debugging-Ausgaben wird allerdings sowohl für die Spalten als auch die Reihen ein sinnvoller Wert ausgegeben. Ich habe dafür folgendes programmiert:
Java:
package gecko.view.iconTable;
import stuff...
public class IconTable extends JTable {
private Logger log;
private IconTableModel iconTableModel;
private FileOperations fileOperations;
private int cols;
public IconTable(FileOperations fileOperations) {
log = LogManager.getLogger(getClass());
log.debug("Initialisiere " + getClass());
this.fileOperations = fileOperations;
setModel(iconTableModel = new IconTableModel());
fileOperations.addCurrentFileListener(new CurrentFileListener() {
@Override
public void currentFilesChanged(File[] currentFiles) {
iconTableModel.setCurrentFiles(currentFiles);
}
});
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
calculateGrid();
iconTableModel.fireTableDataChanged();
}
});
log.debug(getClass() + " wurde initialisiert");
}
private void calculateGrid() {
cols = (getWidth() / 25);
}
private class IconTableModel extends AbstractTableModel {
private File[] currentFiles;
public IconTableModel() {
currentFiles = fileOperations.getCurrentFiles();
}
public void setCurrentFiles(File[] currentFiles) {
this.currentFiles = currentFiles;
}
@Override
public int getColumnCount() {
System.out.println("Cols " + Math.min(currentFiles.length, cols));
return Math.min(currentFiles.length, cols);
}
@Override
public int getRowCount() {
if (currentFiles.length == 0)
return 0;
System.out.println("Rows " + ((cols % currentFiles.length) + 1));
return ((cols % currentFiles.length) + 1);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
System.out.println("got value at " + rowIndex + " " + columnIndex);
return currentFiles[rowIndex * cols + columnIndex];
}
@Override
public String getColumnName(int column) {
return column + "";
}
}
}
Dabei gibt er anfangs für rows 1 aus und für Columns ebenso, also sollte es eine Tabelle mit einem Eintrag darstellen. Die Debugging-Meldung "got value at " + rowIndex + " " + columnIndex wird jedoch nie ausgegeben, also dürfte er aus was für gründen auch immer nie die Tabellendaten einlesen. Die Tabelle wird selbstverständlich richtig an die Oberfläche angefügt
Java:
add(new JScrollPane(new IconTable(geckoInterface.getFileOperations())));
Woran könnte dies liegen?