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
