Pregunta

He creado una clase de renderizador de células personalizadas para lograr esto.

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;
    }


}

y he establecido este renderizador para ser utilizado por las columnas de mi tabla:

    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());

Quiero las filas que contienen una cadena [] de longitud= 7 green y las otras con el color predeterminado.Pero es interesante que todas mis filas se vuelvan verdes.Tengo una línea de impresión como se puede ver.Se imprime 4 veces (mi tabla tiene 12 filas), pero todas las filas se hacen de color verde, en lugar de 4. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

La razón es la memoria de color infame (TM) del valor predeterminado: tiene que configurar los colores siempre , en lugar de solo en una sucursal.

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

Los detalles exactos se explican en una Hilo reciente

Otros consejos

Puede usar XxxCellRenderer, pero mejor y más fácil es usar prepareRenderer()

Para el código correcto, tiene que anular o probar dentro de IF, sigue a los patameters

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top