Pergunta

Eu tenho jTable1 com 2 colunas.Quero controlar a aparência da coluna 1, então uso o código a seguir para definir a fonte do texto nas células em negrito ou não, com base no fato de a linha das células ser par ou ímpar.

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
        boolean isSelected, boolean hasFocus, int row, int column) {
    Component cell = super.getTableCellRendererComponent(
        table, obj, isSelected, hasFocus, row, column );
        if (row % 2 == 0){
            cell.setFont(getFont().deriveFont(Font.BOLD));
        }
        return cell;
    }
}

Eu chamo isso usando:

jTable1.getColumnModel().getColumn(1).setCellRenderer(new 
CustomTableCellRenderer());

O que eu quero é modificar isso TableCellRenderer para que o fundo das células seja pintado com base no valor da outra coluna (coluna 0) na mesma linha.Por exemplo, se o valor na coluna0, linha 5 for "livro", a célula da coluna1, linha 5 será vermelha e se o valor da coluna0 for "jornal", a cor da coluna1 será verde.Meu problema é que não sei como passar o valor da coluna0 para o renderizador da coluna1 para que ele seja usado para alterar as cores.

Foi útil?

Solução 3

Encontrei como acessar os dados de outra coluna:

import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CustomTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent (JTable table, Object obj,
    boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(
    table, obj, isSelected, hasFocus, row, column );

    //I USE THIS TO ACCESS THE DATA FROM ANOTHER CELL!!!
    TableModel model = table.getModel();
    String media= (String) model.getValueAt(row, 0)


    if (row % 2 == 0){
        cell.setFont(getFont().deriveFont(Font.BOLD));
    }


   //SO I GET THE RESULT I WANT
   if ("book".equals(media)){
     cell.setBackground(Color.red)  
   }
   else{
     cell.setBackground(Color.green)
   }  



    return cell;
}
}

Outras dicas

Verifique a assinatura do .getTableCellRendererComponent(...) método:você está obtendo uma referência ao JTable (do qual você pode obter o TableModel) e o índice da linha e coluna atuais.

Usando-os, você pode procurar qualquer valor relativo desejado.

Como mostrado aqui, você pode substituir prepareRenderer() para afetar linhas inteiras.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top