Swing – 根据单元格的值设置单元格的颜色

我想根据单元格的值设置单元格的颜色。 谷歌搜索了一下我发现我可以使用这样的东西:

public class TableCellRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { // get the DefaultCellRenderer to give you the basic component Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); // apply your rules if (value.toString().equals("Red")) c.setBackground(Color.RED); else c.setBackground(Color.GRAY); return c; } } 

我遇到的问题是我想要修改的代码已经为JTable的列设置了TableCellRendererer。 代码中有一个函数如下所示:

 private void configureTableColumns() { Enumeration columns = this.table.getColumnModel().getColumns(); while (columns.hasMoreElements()) { TableColumn tableColumn = (TableColumn) columns.nextElement(); this.setCellRenderer(tableColumn); TableCellRenderer renderer = tableColumn.getCellRenderer(); if (renderer == null) { renderer = this.table.getDefaultRenderer(Object.class); } tableColumn.setCellRenderer(renderer); this.setCellEditor(tableColumn); } } 

使用上面的代码,我还需要添加前面显示的TableCellRenderer类吗? 我想要做的就是检查单元格的值是否为“ABC”并将背景设置为RED。

更新:

我确实尝试将我的TableCellRenderer版本添加为我想要修改的代码中的内部类,但是我得到一个错误,即tableColumn.getCellRenderer()中存在类型不匹配。

 Type mismatch: cannot convert from TableCellRenderer to MyTableExample.TableCellRenderer 

谢谢

覆盖prepareRenderer方法来做到这一点。

例:

 public Component prepareRenderer (TableCellRenderer renderer, int rowIndex, int columnIndex){ Component componenet = super.prepareRenderer(renderer, rowIndex, columnIndex); if(getValueAt(rowIndex, columnIndex).toString().equals("Red")) { componenet.setBackground(Color.RED); } else if(getValueAt(rowIndex, columnIndex).toString().equals("Green")) { componenet.setBackground(Color.GREEN); } return componenet; } 

更新:

 import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; public class PrepareRendereEx { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(new Dimension(400, 100)); Object data[][] = { {"java", "j2ee"}, {"java", "j2ee"}, {"java", "j2ee"} }; Object[] columnNames = {"Java", "J2EE"}; DefaultTableModel model = new DefaultTableModel(data, columnNames); JTable table = new JTable(model) { @Override public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int columnIndex) { JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex); if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("java") && columnIndex == 0) { component.setBackground(Color.RED); } else if(getValueAt(rowIndex, 1).toString().equalsIgnoreCase("j2ee") && columnIndex == 1){ component.setBackground(Color.GREEN); } return component; } }; frame.add(new JScrollPane(table)); frame.setVisible(true); } } 

OUTPUT:

在此处输入图像描述