我想改变JTable中某些单元格的颜色。我试图在一个简单的例子中覆盖getTableCellRendererComponent,它很好。但是,当我做同样的在我的项目没有什么变化......用getTableCellRendererComponent改变颜色JTable单元没有问题
我有我的JPanel与我的JTable在一个盒子这样的:
boxTable=Box.createHorizontalBox();
box2Table.add(boxTable);
//JTable
tablaContador = new JTable(datosContador,cabeceraContador);
//MODIF COLOR
tablaContador.setDefaultRenderer(Object.class, new ColorRenderer());
这样做:
System.out.println(tablaContador.getColumnClass(3));
我可以知道setDefaultRenderer的第一个参数是Object.class 我不知道问题是否在这里...我只有表中的字符串,但我已经尝试过String.class,没有任何反应
然后我修改JTable中的细胞的一些事情:
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);
而且我ColorRenderer类:
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;
}
}
因此它不会在我的项目工作,我不知道为什么
有什么想法吗?
thaks!
为了获得最佳的帮助,请认真考虑你的问题创建和发布有效的[MCVE]/[SSCCE](http://sscce.org )。这让我们完全理解你的代码和你的问题确实有很大的不同。 –
此问题最初是作为以下副本而封闭的:http://stackoverflow.com/questions/18253881/custom-tablecellrenderer-treetablecellrenderer-doesnt-render-table-cells。我不相信它是重复的,因为这个渲染器“扩展”了DefaultTableCellRenderer(不透明),而另一个问题“实现”了TableCellRenderer,在这种情况下,您确实需要担心使标签不透明。 – camickr
@HovercraftFullOfEels,'你是否让自定义渲染器不透明...默认情况下不是', - 默认情况下DefaultTableCellRenderer是不透明的。 – camickr