2

我创建了一个自定义单元格渲染器类来实现这一点。

public class MatchTableCellRenderer extends DefaultTableCellRenderer{


    public Component getTableCellRendererComponent (JTable table,
                                                    Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
        Component cell;
        cell = super.getTableCellRendererComponent(
                table, obj, isSelected, hasFocus, row, column);
        if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
            System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);

            cell.setForeground(Color.green);

        }
        return cell;
    }


}

我已将此渲染器设置为供我的表格列使用:

    tempColumn = table.getColumnModel().getColumn(0);
    tempColumn.setCellEditor(new MacColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(1);
    tempColumn.setCellEditor(new IpColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(2);
    DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
    dfEditor.setClickCountToStart(2);
    tempColumn.setCellEditor(dfEditor);
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

我想要包含长度 = 7 绿色的字符串 [] 和其他具有默认颜色的行。但有趣的是,我所有的行都变成了绿色。如您所见,我有一条打印线。它打印了 4 次(我的表有 12 行),但所有行都变成绿色,而不是 4。我做错了什么?

4

2 回答 2

3

您可以使用XxxCellRenderer,但更好和最简单的是使用prepareRenderer()

要获得正确的代码,您必须在 if-else 中覆盖或测试以下参数

  • 被选中

  • 有焦点

  • 柱子

更多关于类似问题的答案问题

于 2012-07-27T08:51:02.690 回答
3

原因是 DefaultTableCellEditor 臭名昭著的颜色记忆 (TM):您必须始终设置颜色,而不是仅在一个分支中设置颜色。

if (myCondition) {
   setBackground(...) {
} else {
   setBackground(...) 
} 

确切的细节在最近的一个线程中进行了解释

于 2012-07-27T10:23:50.420 回答