AbstractTableModel und TableCellRenderer - Probleme mit der Aktualisierung

Bobblz

Mitglied
Hallo zusammen,

ich habe ein Problem mit JTable, AbstractTableModel, TableCellRenderer.

Folgendes liegt vor:
Eine JTable mit meinem eigenen AbstractTableModel wird erzeugt, übergeben wird dem Model eine String-Liste mit Pfaden. Das Model erstellt daraus 3 Spalten mit Name, Zeitpunkt der Änderung und Größe.
Java:
tblWest = new JFileListTable(new File("./").list());

Die CellRenderer füge ich wie folgt im Konstruktor der JTable auf:
Java:
getColumn("A").setCellRenderer(new MyFileNameTableCellRenderer());
getColumn("B").setCellRenderer(new MyFileDateTableCellRenderer());
getColumn("C").setCellRenderer(new MyFileSizeTableCellRenderer());

Beim Ersten Aufruf, also beim Start des Programmes funktioniert alles, der Renderer arbeitet wie gewünscht! Wenn ich allerdings während der Laufzeit das TableModel verändere werden die Datenänderungen korrekt übernommen, allerding funktioniert der Renderer nicht mehr!
Java:
((JFileListTableModel) tblWest.getModel()).setNewData((new File(westInput.getText())).list());
Hier wurde aus einem Textfeld ein Pfad entnommen und dem Model übergeben, das so die neuen Daten generiert.

WARUM arbeitet der Renderer da nicht mehr korrekt?


Java:
package mdi;

import javax.swing.JTable;

public class JFileListTable extends JTable {
	
	public JFileListTable(String[] files) {
		super(new JFileListTableModel(files));
		createDefaultColumnsFromModel();
		getColumn("A").setCellRenderer(new MyFileNameTableCellRenderer());
		getColumn("B").setCellRenderer(new MyFileDateTableCellRenderer());
		getColumn("C").setCellRenderer(new MyFileSizeTableCellRenderer());
	}
}

=========================================================

package mdi;

import java.io.File;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;


public class JFileListTableModel extends AbstractTableModel {
	
	private ArrayList<File> name = new ArrayList<File>();

	public JFileListTableModel(String[] files){
		super();
		setNewData(files);
	};
	
	public void setNewData(String[] files) {
		name.clear();
		for (int i=0; i<files.length;i++) {
			name.add(new File(files[i]));
		}
	}

	@Override
	public int getColumnCount() {
		return 3;
	}

	@Override
	public int getRowCount() {
		return name.size();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return name.get(rowIndex);
	}

}

=======================================================

package mdi;

import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import widget.FileChangeEvent;
import widget.JFileInputField;
import java.awt.*;
import java.io.File;

public class JInternalDirCompareFrame extends JInternalFrame implements widget.FileChangeListener {
	
	private JPanel west = new JPanel(new BorderLayout());
	private JPanel east = new JPanel(new BorderLayout());
	private widget.JFileInputField westInput = new JFileInputField("o");
	private widget.JFileInputField eastInput = new JFileInputField("o");
	private JFileListTable tblWest;
	private JFileListTable tblEast;
	
	public JInternalDirCompareFrame() {
		super("DirCompare");
		setLayout(new BorderLayout());

		westInput.addFileChangeListener(this);
		eastInput.addFileChangeListener(this);
		
		tblWest = new JFileListTable(new File("./").list());
		tblEast = new JFileListTable(new File("./src").list());
		west.add(westInput, BorderLayout.NORTH);
		west.add(tblWest, BorderLayout.SOUTH);
		east.add(eastInput, BorderLayout.NORTH);
		east.add(tblEast, BorderLayout.SOUTH);
		add(west, BorderLayout.WEST);
		add(east, BorderLayout.EAST);
		
		pack();
		setVisible(true);

	}

	@Override
	public void fileChanged(FileChangeEvent e) {
		
		if (e.getSource() == westInput) {
			
			((JFileListTableModel) tblWest.getModel()).setNewData((new File(westInput.getText())).list());
			
		} else if (e.getSource() == eastInput) {
			
			((JFileListTableModel) tblEast.getModel()).setNewData((new File(eastInput.getText())).list());
			
		}
		
	}
}

Grüße
Robert
 
Dummer Fehler!

File.list() gibt nur den Datei-/Ordnernamen zurück ohne Pfad!
Der Renderer hat gearbeitet, nur di Datei konnte nicht gefundne werden, da ich mit dem files-Array falch umgegangen bin!

Danke!
 
Zurück