G
Guest
Gast
Hallo Leute,
ich überschreibe die Funktion prepareRenderer(...) um jede zweite Zeile einzufärben. Das klappt auch prima, wie folgendes Beispiel zeigt:
Jetzt füge ich jedoch noch einen eigenen TableCellRenderer ein und dann klappt das Einfärben nicht mehr.
Der eigene TableCellRenderer dient dazu, den Text zu drehen. Um den Text zu drehen verwende ich JXLabel.
Das ganze sieht dann so aus:
Jetzt ist die Frage, wieso die überschriebene prepareRenderer(...) Funktion nicht mehr jede zweite Zeile einfärbt. Kann mir da jemand helfen?
ich überschreibe die Funktion prepareRenderer(...) um jede zweite Zeile einzufärben. Das klappt auch prima, wie folgendes Beispiel zeigt:
Code:
public class Demo extends JFrame{
public Demo(){
Object[][] o = new Object[10][];
for (int row = 0; row < o.length; row++) {
o[row] = new Object[]{"abc", "defghij"};
}
JTable table = new JTable(o, new Object[]{"Spalte 1", "Spalte 2"}){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row))
c.setBackground(row % 2 == 0 ? new Color(228,223,252) : null );
return c;
}
};
table.setRowHeight(50);
this.add(new JScrollPane(table),BorderLayout.CENTER);
this.pack();
this.setSize(600, 400);
this.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Demo();
}
});
}
}
Jetzt füge ich jedoch noch einen eigenen TableCellRenderer ein und dann klappt das Einfärben nicht mehr.
Der eigene TableCellRenderer dient dazu, den Text zu drehen. Um den Text zu drehen verwende ich JXLabel.
Das ganze sieht dann so aus:
Code:
public class Demo extends JFrame{
public Demo(){
Object[][] o = new Object[10][];
for (int row = 0; row < o.length; row++) {
o[row] = new Object[]{"abc", "defghij"};
}
JTable table = new JTable(o, new Object[]{"Spalte 1", "Spalte 2"}){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row))
c.setBackground(row % 2 == 0 ? new Color(228,223,252) : null );
return c;
}
};
table.setRowHeight(50);
table.setDefaultRenderer(Object.class, new MyCellRenderer());
this.add(new JScrollPane(table),BorderLayout.CENTER);
this.pack();
this.setSize(600, 400);
this.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Demo();
}
});
}
class MyCellRenderer extends JXLabel implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof String){
setText((String)value);
setTextRotation( 5.8 );
}
else {
super.setText("");
}
return this;
}
}
}
Jetzt ist die Frage, wieso die überschriebene prepareRenderer(...) Funktion nicht mehr jede zweite Zeile einfärbt. Kann mir da jemand helfen?