import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
class Entry {
private File file;
private Color backgroundColor;
public Entry(File file, Color backgroundColor) {
super();
this.file = file;
this.backgroundColor = backgroundColor;
}
public Color getBackgroundColor() {
return backgroundColor;
}
public File getFile() {
return file;
}
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}
public void setFile(File file) {
this.file = file;
}
}
class MyTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// do basic stuff
Component result = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (!(table.getModel() instanceof MyTableModel))
return result;
// do additional stuff
MyTableModel tModel = (MyTableModel) table.getModel();
Entry e = tModel.getEntries().get(row);
setBackground(e.getBackgroundColor());
return this;
}
}
class MyTableModel extends AbstractTableModel {
private final static int FILE_NAME = 0;
private final static int PATH_NAME = 1;
private List<Entry> entries = new ArrayList<Entry>();
public int getColumnCount() {
return 2;
}
List<Entry> getEntries() {
return entries;
}
public int getRowCount() {
return entries.size();
}
public Object getValueAt(int row, int column) {
Entry e = entries.get(row);
switch (column) {
case FILE_NAME:
return e.getFile().getName();
case PATH_NAME:
return e.getFile().getAbsoluteFile();
default:
/* unreachable */
return null;
}
}
}
public class TestA extends JFrame {
public static void main(String[] args) {
new TestA().setVisible(true);
}
private JTable table;
private MyTableModel mtModel;
public TestA() {
super();
setLayout(new GridLayout(1, 1));
setSize(200, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
mtModel = new MyTableModel();
Entry e = new Entry(new File("test.txt"), new Color(255, 200, 190));
mtModel.getEntries().add(e);
e = new Entry(new File("blub.txt"), new Color(200, 255, 195));
mtModel.getEntries().add(e);
for (int i = 0; i <20; i++) {
e = new Entry(new File(String.format("oink%d.csv", i)), new Color(
220 + i, 220 + i, 128 + i * 4));
mtModel.getEntries().add(e);
}
table = new JTable(mtModel);
// ich weiß nicht ob du nicht mehrere Renderer benötigst
// daher hab ich nur einen Object renderer registriert.
table.setDefaultRenderer(Object.class, new MyTableCellRenderer());
getContentPane().add(new JScrollPane(table));
}
}