Ajuda Pintar linha JTable

6 respostas
evertonsilvagomesjav

Bom to seguindo alguns exemplos aqui do GUJ mais garrei aqui no método nao sei como implementar, me ajudem?

package com.mascarenhas.model.tables;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class MyCellRenderer implements TableCellRenderer {

	
	private Color cor1;
	private Color cor2;
	
	public MyCellRenderer(){
		
		this.cor1 = Color.BLUE;
		this.cor2 = Color.WHITE;
		
	}
	
	
	@Override
	public Component getTableCellRendererComponent(JTable arg0, Object arg1,
			                                      boolean arg2, boolean arg3, int row, int column) {
		
                               // isso foi o que eu pensei quando row for par colore de uma cor quando nao de outra. Mas nao sei se estar certo
		if(row % 2 == 0){
			

						
		}
		
	}

}

aqui como estou chamando a class mas tb nao se se esta certo :(

package com.mascarenhas.model.tables;

import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

import com.mascarenhas.view.Contrato1;

public class ColorirLinhaTable {

	public void getColorir(){
		
	TableCellRenderer cellRenderer = new MyCellRenderer();
		
		int rowCount = Contrato1.jTable.getRowCount();
		
		for(int i = 0; i < rowCount; i++){
			
			TableColumn column =  Contrato1.jTable.getColumnModel().getColumn(i);   // aqui ele ta pegando a coluna nao e nao? Nao teria que pegar a linha?
			column.setCellRenderer(cellRenderer);  
			
		}
		
		
	}
	
	
}
[code]

6 Respostas

D

São 2 lugares que você precisa verificar:
1 - Setar qual renderer vai utilizar:

objeto_tabela.setDefaultRenderer(Object.class, new SuaClasseTableCellRenderer());

2 - Modificar o renderer para mudar a cor de fundo.

if(row%2==0)
    c.setBackground(new Color(240,240,240));
else
    c.setBackground(new Color(255,255,255));
evertonsilvagomesjav

entendi sua segunda parte:

2 - Modificar o renderer para mudar a cor de fundo. view plaincopy to clipboardprint? if(row%2==0) c.setBackground(new Color(240,240,240)); else c.setBackground(new Color(255,255,255)); if(row%2==0) c.setBackground(new Color(240,240,240)); else c.setBackground(new Color(255,255,255));

a primeira nao tendi =/

evertonsilvagomesjav

alguem ajuda?

helders

Eu utilizo um método para fazer isso, geralmente eu preencho primeiro o Modelo do jTable e logo depois chamo este método:

private void addCor() {
        // minha table se chama jTable1, se precisar troque o nome
        jTable1.setDefaultRenderer(Object.class, new javax.swing.table.DefaultTableCellRenderer() {   
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {   
        super.getTableCellRendererComponent(jTable1, value, isSelected, hasFocus, row, column);   
            // aqui você coloca a condição para pintar a linha, neste caso se o valor da coluna 4 da linha for menor que 2 (table.getValueAt(row,4), aqui table é o nome que está no parametro ali em cima, row é a linha atual da verificação)
            if (Float.valueOf(table.getValueAt(row, 4).toString()) < 2) {   
                // nesses casos eu coloco o background como vermelho
                setBackground(Color.RED);
                // caso contrário nao tem background
            } else { setBackground(null); }
        return this;   
    }});
    }

Espero que isso ajude :slight_smile:

C

Sei que é um pouco antigo este tópico mais estava quebrando a cabeça com o JTable, e este código funcionou pois quero usar com o Default sem precisar montar a tabela na mão com o TableModel pelo que estava entendendo com os outros fóruns o Default não pintaria a linha e tem poucos recursos, mas com este método addcor() pintou a linha sim.

valeu…

marcospaulo.suporte

Se for pintar apenas celulas dependendo da condição.
Eu apanhei mas consegui… segue:

jTable1.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            public Component getTableCellRendererComponent(JTable table, Object value,  
                    boolean isSelected, boolean hasFocus, int row, int column) {  
               
                Component cell2 = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                Object ref2 = table.getValueAt(row, jcoluna_setup);
                Object ref = table.getValueAt(row, jcoluna_percentual);//coluna percentual

                if (ref2 != null && Integer.parseInt(ref2.toString().substring(3, 5)) >= 05 && column == jcoluna_setup) {  
                    cell2.setForeground(Color.WHITE);
                    cell2.setBackground(Color.red);
                }
                else if (ref != null && Integer.parseInt(ref.toString().substring(0, 2)) <= 75 && column == jcoluna_percentual) {  
                        cell.setForeground(Color.WHITE);
                        cell.setBackground(Color.red);
                }
                else if (ref != null && Integer.parseInt(ref.toString().substring(0, 2)) >= 130 && column == jcoluna_percentual) {  
                        cell.setForeground(Color.WHITE);
                        cell.setBackground(Color.blue);
                        JOptionPane.showMessageDialog(rootPane,"Percentual acima de 130%, você tem certeza disso? ");
                }
                else {  
                    cell2.setForeground(Color.BLACK);
                    cell2.setBackground(Color.WHITE);
                } 

                    return this;}
    });
Criado 1 de abril de 2010
Ultima resposta 3 de dez. de 2012
Respostas 6
Participantes 5