如何动态更改JXTreeTable中特定单元格的颜色

我正在使用JXTreeTable制作treetable结构现在我想动态地改变特定单元格的颜色。 如何更改细胞的颜色?

我发现这段代码改变了颜色,但这不起作用。

这是代码:

 leftTree.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if(Integer.parseInt(rowvalue[0])==row && column==0) { c.setBackground(Color.red); } return c; } }); 

使用荧光笔。

 addHighlighter(new ColorHighlighter()); 

如果单元格包含具有颜色名称的文本,则可以修改该值。

 import java.awt.Color; import java.awt.Component; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; public class MainClass extends JFrame { ColorName colors[] = { new ColorName("Red"), new ColorName("Green"), new ColorName("Blue"), new ColorName("Black"), new ColorName("White") }; public MainClass() { super("Table With DefaultCellEditor Example"); setSize(500, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); JTable table = new JTable(new AbstractTableModel() { ColorName data[] = { colors[0], colors[1], colors[2], colors[3], colors[4], colors[0], colors[1], colors[2], colors[3], colors[4] }; public int getColumnCount() { return 3; } public int getRowCount() { return 10; } public Object getValueAt(int r, int c) { switch (c) { case 0: return (r + 1) + "."; case 1: return "Some pithy quote #" + r; case 2: return data[r]; } return "Bad Column"; } public Class getColumnClass(int c) { if (c == 2) return ColorName.class; return String.class; } public boolean isCellEditable(int r, int c) { return c == 2; } public void setValueAt(Object value, int r, int c) { data[r] = (ColorName) value; } }); table.setDefaultEditor(ColorName.class, new DefaultCellEditor(new JComboBox(colors))); table.setDefaultRenderer(ColorName.class, new TableCellRenderer()); table.setRowHeight(20); getContentPane().add(new JScrollPane(table)); } public static void main(String args[]) { MainClass ex = new MainClass(); ex.setVisible(true); } public class ColorName { String cname; public ColorName(String name) { cname = name; } public String toString() { return cname; } } public class TableCellRenderer extends DefaultTableCellRenderer { 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; } } }