Ajuda com cor na JTable.... não está mudando a cor da linha<<<<<

4 respostas
L

Boa Tarde Pessoal....

Meu problema é que eu não consigo alterar a cor de background da linha se na celular tiver
um valor do tipo Date, ou do tipo int...

o metodo getTableCellRendererComponent não faz a mudança...

alguem sabe o por quê??

meu código é este:

public class LinhasIntercaladasJtable extends DefaultTableCellRenderer implements TableCellRenderer {
			
			private Color primeiraLinha;
			private Color segundaLinha;
			public LinhasIntercaladasJtable(Color primeiraLinha, Color segundaLinha){
				this.primeiraLinha=primeiraLinha;
				this.segundaLinha=segundaLinha;
			}
	   
	   public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();  
	   
	   public Component getTableCellRendererComponent(JTable table, Object value,  
	       boolean isSelected, boolean hasFocus, int row, int column) {  
	     Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(  
	         table, value, isSelected, hasFocus, row, column);  
	      
	     Color background;
	     if (isSelected) {  
	    	 background = new Color(49,106,197);  
	     } else {  
	       if (row % 2 == 0) {  
	         background = primeiraLinha;//Color.white;  
	       } else {
	         background = segundaLinha;//new Color(230,230,230);  
	       }
	     }
	     
	     renderer.setBackground(background);
	     return renderer;  
	   }  
	 }

Na hora de setar para minha jTable utilizo esse código:

tbPesquisa.setDefaultRenderer(Object.class, new LinhasIntercaladasJtable(
				new Color(255, 255, 255), new Color(245, 245, 245)));
Lembrando.. que possuo algumas colunas que tem valores do tipo int, date e nessas linhas a cor não muda... Me ajudem... :cry:

Abraço....

4 Respostas

L

Ninguem tem alguma sujestãão???

janjan

Olha esse exemplo!
ignora o botao de adicionar linha!!!

package teste;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class te extends JFrame {
	JTable tabela = new JTable();

	public te() {
		String[][] dados = new String[][] { { "SP", "Sao Paulo" }, { "RJ", "Rio de Janeiro" }, { "RN", "Rio Grande do Norte" }, { "PR", "Parana" }, { "SP", "Sao Paulo" }, { "RJ", "Rio de Janeiro" }, { "RN", "Rio Grande do Norte" },
				{ "PR", "Parana" } };
		String[] colunas = new String[] { "Estado", "Cidade" };
		// Ao inves de passar direto, colocamos os dados em um modelo
		DefaultTableModel modelo = new DefaultTableModel(dados, colunas);
		// e passamos o modelo para criar a jtable
		tabela.setModel(modelo);
		TableCellRenderer render = new EvenOddRenderer();
		tabela.setDefaultRenderer(Object.class, render);
		JScrollPane scrollPane = new JScrollPane(tabela);

		this.getContentPane().add(scrollPane, BorderLayout.CENTER);

		JButton bt = new JButton("Adiciona linha");
		bt.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				adiciona();

			}

		});

		this.getContentPane().add(bt, BorderLayout.SOUTH);
		this.setSize(300, 150);
		this.setVisible(true);

	}

	private void adiciona() {
		javax.swing.table.DefaultTableModel model = (DefaultTableModel) this.tabela.getModel();
		model.insertRow(0, new Object[] { "aaaa", "aaaa" });

	}

	public void removelinha() {
		DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();

		// Remove a linha
		modelo.removeRow(tabela.getSelectedRow());

	}

	public static void main(String args[]) {
		new te();
	}
}

class EvenOddRenderer implements TableCellRenderer {

	public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();

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

		Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

		((JLabel) renderer).setOpaque(true);
		Color foreground, background;
		if (isSelected) {
			foreground = Color.yellow;
			background = Color.green;
		} else {
			if (row % 2 == 0) {
				foreground = Color.blue;
				background = Color.white;
			} else {
				foreground = Color.white;
				background = Color.blue;
			}
		}
		renderer.setForeground(foreground);
		renderer.setBackground(background);
		return renderer;
	}
}
ViniGodoy

Pq vc falou que aquele é o renderer de Object.class, não de Date.class e nem de Integer.class.
Para esses tipos, o JTable tem outro renderer.

L

Amigo tenta assim:

suaTabela.setDefaultCellRenderer(new DefaultTableCellRenderer() {
            Color corLinha;
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                    boolean hasFocus, int row, int column) {
                if (value == null) {
                    return this;
                }
                super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                Receber receber = (Receber) tbGrid.getValues().get(tbGrid.getActualRowAt(row));
                if (isSelected) {
                    corLinha = UIManager.getColor("Table.selectionForeground");
                } else if (receber.isTroca()) {
                    corLinha = Color.RED;
                } else {
                    corLinha = UIManager.getColor("Table.foreground");
                }
                setForeground(corLinha);
                return this;
            }
        });
    }
Criado 17 de novembro de 2009
Ultima resposta 18 de nov. de 2009
Respostas 4
Participantes 4