Problemas CellRenderer

4 respostas
J

Tenho uma jtable onde o usuario adiciona os produtos, e edita a quantidade na propria jtable estou tentando colorir a linha de vermelho caso o usuario selecione uma quantidade maior que o estoque atual.
Já tentei de varias formas, mas nada resolve.

Metodo com problemas.

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

Component renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
String abaixoEstoque=table.getValueAt(row, 10 ).toString(); //Campo booleano retorna string true ou false   -------> O problema esta aqui
    if (abaixoEstoque.equals("true")) {
        renderer.setForeground(Color.Red);
    } else {
        renderer.setForeground(table.getForeground());
    }
    return renderer;

A variavel value retorna pra mim o valor da primeira coluna da table, como faço para que ela retorne o valor da coluna 10???
Outras sugestoes tambem sao bem vindas!

4 Respostas

W

caro jeanpablojp,

tenta assim
public Component getTableCellRendererComponent(
            JTable table,
            Object value,
            boolean isSelected,
            boolean hasFocus,
            int row,
            int column) {

        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        this.setHorizontalAlignment(JTextField.CENTER);
        table.getColumnModel().getColumn(column).setCellRenderer(this);
        setText(value.toString());
        setForeground(Color.RED);
        return this;
    }
Uma coisa, sempre que você colocar codigo, coloque dentro das tags [code] e [/code]
J
Bem consegui colorir uma celula usando o seguinte codigo:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        if (value == null) {
            return this;
        }
        Component renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        Boolean valor = (Boolean) value;

        if (valor == true) {
            renderer.setForeground(this.color);
        } else {
            renderer.setForeground(table.getForeground());
        }
        return renderer;
    }

Mas o problema é que uso a coluna 10 da table para validar o renderer, mas na verdade quero colorir a celula localizada na coluna 0, ou senao colorir a linha inteira.
A coluna 10 guarda o status do tipo boolean , que me avisa se eu tenho ou nao quantidade disponivel em estoque dependendo da quantidade que o usuario digitar na coluna quantidade,e este status é oculto.

ViniGodoy

Eu geralmente peço ao model:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {  
   if (value == null) {  
      return this;  
    }  

   Component renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);  
   ItemEstoque item = ((ItemEstoqueTableModel)table.getModel()).get(row);
   if (!item.isQuantidadeDisponivel()) {  
      renderer.setForeground(this.color);  
   } else {  
      renderer.setForeground(table.getForeground());  
   }  
   return renderer;  
}

É melhor pq assim pouco importa a coluna que o seu boolean esteja.

O código acima assume que sua tabela exibe objetos da classe ItemEstoque e que o seu tableModel é da classe ItemEstoqueTableModel.

J

Vlw ViniGodoy, funcionou perfeitamente.

Criado 15 de setembro de 2010
Ultima resposta 15 de set. de 2010
Respostas 4
Participantes 3