DefaultTableCellRenderer 不工作
DefaultTableCellRenderer not working
我正在尝试更改 JTable 第三行单元格的颜色(如果它们有值)。我读到一个很好的方法是使用 table 单元格渲染器。然而,它似乎什么也没做!这是我的 RENDERER 代码:
public class RenderTablaPrestamos extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable tabla, Object valor,
boolean isSelected, boolean hasFocus,
int row, int col){
JLabel celda = (JLabel) super.getTableCellRendererComponent(tabla, valor, isSelected, hasFocus, row, col);
if(valor instanceof Integer){
Integer v=(Integer)valor;
if(col==3){
if(valor!=null){
celda.setBackground(Color.red);
}
else{
celda.setBackground(Color.WHITE);
}
}
else{
celda.setBackground(Color.WHITE);
}
}
return celda;
}
}
这是我使用渲染器的方式:
tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos());
这是我的 JTable 的图片(我不认为模型代码有任何用处,因为它有点长):
我认为它与 if 条款 没有任何关系,正如我评论的那样,它也不起作用。
我哪里错了?
使用
for (int i = 0; i < tabla.getColumnCount(); i++) {
tabla.getColumnModel().getColumn(i).setCellRenderer(new RenderTablaPrestamos());
}
而不是
tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos());
setDefaultRenderer
中的代码按预期运行:
final YourCellRenderer cellRenderer = new YourCellRenderer();
YourTableModel stModel = new YourTableModel();
table = new JTable(stModel);
table.setDefaultRenderer(YourComponent.class, cellRenderer);
它似乎没有渲染的原因是当您将 YourComponent.class
映射到渲染器时,它没有触发,因为 YourTableModel
认为 class 是一个Object
.
要更正此问题,您需要覆盖 YourTableModel
class:
中的 getColumnClass
方法
public class YourTableModel extends AbstractTableModel {
...
@Override
public Class<?> getColumnClass(int columnIndex) {
return YourComponent.class;
}
...
}
我正在尝试更改 JTable 第三行单元格的颜色(如果它们有值)。我读到一个很好的方法是使用 table 单元格渲染器。然而,它似乎什么也没做!这是我的 RENDERER 代码:
public class RenderTablaPrestamos extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable tabla, Object valor,
boolean isSelected, boolean hasFocus,
int row, int col){
JLabel celda = (JLabel) super.getTableCellRendererComponent(tabla, valor, isSelected, hasFocus, row, col);
if(valor instanceof Integer){
Integer v=(Integer)valor;
if(col==3){
if(valor!=null){
celda.setBackground(Color.red);
}
else{
celda.setBackground(Color.WHITE);
}
}
else{
celda.setBackground(Color.WHITE);
}
}
return celda;
}
}
这是我使用渲染器的方式:
tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos());
这是我的 JTable 的图片(我不认为模型代码有任何用处,因为它有点长):
我认为它与 if 条款 没有任何关系,正如我评论的那样,它也不起作用。
我哪里错了?
使用
for (int i = 0; i < tabla.getColumnCount(); i++) {
tabla.getColumnModel().getColumn(i).setCellRenderer(new RenderTablaPrestamos());
}
而不是
tablaUsuariosPrestamos.setDefaultRenderer(Object.class,new RenderTablaPrestamos());
setDefaultRenderer
中的代码按预期运行:
final YourCellRenderer cellRenderer = new YourCellRenderer();
YourTableModel stModel = new YourTableModel();
table = new JTable(stModel);
table.setDefaultRenderer(YourComponent.class, cellRenderer);
它似乎没有渲染的原因是当您将 YourComponent.class
映射到渲染器时,它没有触发,因为 YourTableModel
认为 class 是一个Object
.
要更正此问题,您需要覆盖 YourTableModel
class:
getColumnClass
方法
public class YourTableModel extends AbstractTableModel {
...
@Override
public Class<?> getColumnClass(int columnIndex) {
return YourComponent.class;
}
...
}