[Resolvido]JTable zebrada errado

Olá amigos sei que é um assunto já falado a muito tempo sobre JTable zebrada mas a questão é que eu estou usando o Projeto Towel como TableModel
e ao invocar a classe para deixar a JTable Zebrada ela fica da seguinte forma

Codigo do TableCellRenderer

[code]import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class MeuRenderer 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 (row % 2 == 0) {  
        foreground = Color.BLACK;  
        background = Color.white;  
  
      } else {  
        foreground = Color.BLACK;  
        background = Color.lightGray;  
  
      }  
  
    renderer.setForeground(foreground);  
    renderer.setBackground(background);  
    return renderer;  
  
  }  
}  

[/code]

Código da JTable

[code]
final JTable table = new JTable();
table.setShowGrid(false);
table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
//
// Resizer expandir = new Resizer();
// expandir.fitAllColumns(table);
// final TableFilter filtro = new TableFilter(
// table.getTableHeader(), tableModel);
table.setModel(tableModel);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(100);
table.getColumnModel().getColumn(2).setPreferredWidth(50);
table.getColumnModel().getColumn(3).setPreferredWidth(250);

	TableCellRenderer renderer = new MeuRenderer();
    table.setDefaultRenderer(Object.class, renderer);[/code]

gostaria que ela ficasse toda zebrabrada e quando eu clicar na linha ela deixe a mesma diferente para saber que essa e a linha selecionada…
agradeço desde de já os amigos…
imagem da JTable

Você não está tratando a cor do foreground quando o hasFocus (que indica que a linha tem o foco) for true.

[code]import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class MeuRenderer 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 (hasFocus) {
        foreground = Color.white;  
        background = Color.BLUE.darker();  
      } else if (row % 2 == 0) {  
        foreground = Color.BLACK;  
        background = Color.white;  
  
      } else {  
        foreground = Color.BLACK;  
        background = Color.lightGray;  
  
      }  
  
    renderer.setForeground(foreground);  
    renderer.setBackground(background);  
    return renderer;  
  
  }  
}  

[/code]

Amigo ViniGodoy eu testei aqui e o resultado é
mas ai quando seleciono na coluna código esse é o resultado

depois ao seleciona outra coluna o resultado é

como faço para ficar uma seleção completa na JTable e a coluna código ficar zebrada também, esse problema é que esta me quebrando a cabeça…

Provavelmente a coluna não está definida como Object.class e sim como Integer.class.

Sim mas ai se eu colocar ela como Interger.class so ela fica zebrada…

Chame o método 2 vezes, um com Object.class e outra com Integer.class.

Perfeito ViniGodoy, não abusando da sua boa fé, a seleção da linha completa resume-se em

/*Aqui defino selecionar uma unica linha por vez*/
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

como faço para ele selecionar toda a linha e não so uma coluna como mostra abaixo ?

Resolvido amigo, segue o código com sua implementação

[code]

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

public class MeuRenderer extends DefaultTableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
/Variaveis com as cores…/
private Color whiteColor = new Color(254, 254, 254);
private Color alternateColor = new Color(204, 204, 204);
private Color selectedColor = new Color(61, 128, 223);

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

	super.getTableCellRendererComponent(table, value, selecionado, hasFocus,row, column);

	/*Cor de fundo*/
	Color bg;
	/*Quando selecionado a linha seta as cores */
	if (hasFocus) {
		bg = selectedColor;
		setBackground(bg);
		setForeground(selecionado ? Color.white : Color.black);
	}
	/*Quando não selecionado e o resultado do valor = 0, a linha seta as cores */
	else if (!selecionado){		
		bg = (row % 2 == 0 ? alternateColor : whiteColor);
	/*Quando não selecionado e o resultado do valor = 0, a linha seta as cores */
	}else{
	bg = selectedColor;
	setBackground(bg);
	setForeground(selecionado ? Color.white : Color.black);
	}
	

	/*
	 * if (value instanceof ImageIcon) { setIcon((ImageIcon) value);
	 * setText(""); } else setIcon(null);
	 */
	
	
	/*Retorna o objeto*/
	return this;
	
	/*Setando os valores na JTable
	 * 
	 * Cria a instancia da classe
	TableCellRenderer renderer = new MeuRenderer();
	
	Seta o valor nas colunas Interger.class
    table.setDefaultRenderer(Integer.class, renderer);
    
    Seta o valor nas colunas Object.class
    table.setDefaultRenderer(Object.class, renderer);
	 * 
	 * */
}

} [/code]

post que ajudou tbm
http://www.guj.com.br/java/124963-jtable-dinamica/3

resultado