Ich versuche, die Farbe einiger Zellen in meiner JTable zu ändern. Ich habe versucht, GetTableCellRendererComponent in einem einfachen Beispiel zu überschreiben, und es funktioniert gut. Aber wenn ich das gleiche tun in meinem Projekt ändert sich nichts ...Farbe ändern JTable-Zellen mit getTableCellRendererComponent NOTHING HAPPENDS
Ich habe meine JPanel mit meinem JTable in einer Box wie folgt aus:
boxTable=Box.createHorizontalBox();
box2Table.add(boxTable);
//JTable
tablaContador = new JTable(datosContador,cabeceraContador);
//MODIF COLOR
tablaContador.setDefaultRenderer(Object.class, new ColorRenderer());
tun:
System.out.println(tablaContador.getColumnClass(3));
Ich weiß, kann dass der erste Parameter von setDefaultRenderer ist Object.class Ich weiß nicht, ob das Problem hier ist ... Ich habe nur Zeichenfolgen in der Tabelle, aber ich habe versucht String.class und nichts passiert
Ändern Sie dann ich einige Dinge von JTable der Zellen:
tablaContador.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
boxTable.add(tablaContador);
//Align cells
for (int i=0; i<cabeceraContador.length;i++){
tablaContador.getColumnModel().getColumn(i).setCellRenderer(alinearCeldas);
}
//Modify cells' width
tablaContador.getColumnModel().getColumn(0).setMinWidth(150);
for (int i=1; i<cabeceraContador.length;i++){
tablaContador.getColumnModel().getColumn(i).setMaxWidth(40);
}
//Scroll for the Table
scrollContador=new JScrollPane(tablaContador,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollContador.setPreferredSize(new Dimension(1000,80));
scrollContador.setMinimumSize(new Dimension(1000,80));
scrollContador.setMaximumSize(new Dimension(2000,80));
//Add scroll to the box
box2Table.add(scrollContador);
Und meine ColorRenderer Klasse:
public class ColorRenderer extends DefaultTableCellRenderer{
private Component c;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {
c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(Color.BLUE);
return c;
}
}
Es ist also nicht in meinem Projekt arbeiten, ich weiß nicht, warum
eine Idee?
thaks!
Für beste Hilfe, bitte eine gültige [MCVE]/[SSCCE] (http://sscce.org in Ihrer Frage die Erstellung und Buchung in Erwägung ziehen,). Dies macht wirklich einen großen Unterschied darin, dass wir Ihren Code und Ihre Frage vollständig verstehen können. –
Diese Frage wurde ursprünglich als Duplikat geschlossen von: http://stackoverflow.com/questions/18253881/custom-tablecellulenderer-treetablecellulenderer-doesnt-render-table-cells. Ich glaube nicht, dass es ein Duplikat ist, da dieser Renderer den DefaultTableCellRenderer (der undurchsichtig ist) "erweitert", während die andere Frage den TableCellRenderer "implementiert". In diesem Fall müssen Sie sich darum sorgen, das Label undurchsichtig zu machen. – camickr
@HovercraftFullOfEels, 'Machen Sie Ihren benutzerdefinierten Renderer undurchsichtig ... standardmäßig nicht ', - ist der DefaultTableCellRenderer standardmäßig opak. – camickr