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

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绿色的String []的行和具有默认颜色的其他人。但是,我所有的行都变得绿色了很有趣。我可以看到打印线。它被打印4次(我的表有12行),但所有的行都是绿色的,而不是4.我做错了什么?

有帮助吗?

解决方案

原因是defaulttablecelleditor的臭名昭着的颜色存储器(tm):您必须设置颜色始终,而不是仅在一个分支中。

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

确切的细节是在最近的线程

其他提示

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

对于正确的代码,您必须覆盖或测试IF - 否则遵循patameters

  • 已发行

  • hasfocus

  • 更多在 answers

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top