Colorir linha sim, linha não em uma JTable

Pessoal, qual é a maneira de se colorir linha sim, linha não em uma JTable?
Obrigada

Oi,

Seria um efeito zebrinha?

Tchauzin!

Não sei o quer dizer com efeito zebrinha. Quero colorir uma linha e a outra deixa-la branco.

Oi,

Se eu não me engano, bocê deverá sobrescrever o método prepareRenderer

Tchauzin!

Outra forma, que não envolve fazer absolutamente nada, é você usar o Look & Feel “Nimbus”. Veja como é que fica sem eu mexer absolutamente nada (exceto setar o look & feel):

Oi,

Assim funciona.:

JTable tabela = new JTable(conteudo, colunas){ public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int vColIndex) { Component c = super.prepareRenderer(renderer, rowIndex, vColIndex); if (vColIndex % 2 == 0 && !isCellSelected(rowIndex, vColIndex)) { c.setBackground(Color.yellow); } else { c.setBackground(getBackground()); } return c; } };

Tchauzin!

[quote=entanglement]Outra forma, que não envolve fazer absolutamente nada, é você usar o Look & Feel “Nimbus”. Veja como é que fica sem eu mexer absolutamente nada (exceto setar o look & feel):
[/quote]

Oi,

Não teria que adicionar um .jar nas bibliotecas do projeto?

Tchauzin!

Desculpe a minha ignorancia, mas como eu uso Look & Feel em uma JTable?

Olá oitathi

Tente isso para o sistema:

        FramePrincipal.setDefaultLookAndFeelDecorated(true);
        LookAndFeelInfo[] lafs = (LookAndFeelInfo[]) UIManager.getInstalledLookAndFeels();

para o jTable

http://www.guj.com.br/posts/list/30793.java
http://forums.java.net/jive/thread.jspa?messageID=338905&tstart=0

Boa sorte

Silvio

[quote=lina][quote=entanglement]Outra forma, que não envolve fazer absolutamente nada, é você usar o Look & Feel “Nimbus”. Veja como é que fica sem eu mexer absolutamente nada (exceto setar o look & feel):
[/quote]

Oi,

Não teria que adicionar um .jar nas bibliotecas do projeto?

Tchauzin![/quote]

A partir do Java 6.0 update 10 ( a versão atual é 21) não precisa adicionar nenhum JAR.

Oi,

Utilizo aqui o 6_10 ainda… estão é por isso! rs

Obrigada!

Tchauzin!

Eu tô tentando fazer assim, mas não tô conseguindo:

private DefaultTableCellRenderer ioRender = new DefaultTableCellHeaderRenderer();
private JTable table;
public minhaClasse(){
   table=new JTable(9,3);
   table.setSize(600,200);
   table.setLocation(42,80);
   table.setFont(new Font("arial",Font.PLAIN,15));
   table.setRowHeight(25);
   add(table);
   completaTabela();
}


 public void completaTabela(parametros){
     for(i=0; i<table.getRowCount();i++)
                if(i%2==0){
                    ioRender.setBackground(Color.RED);
                    table.getColumnModel().getColumn(0).setCellRenderer(ioRender);
                    table.repaint();
                }
}

Tah muito errado?

Oi,

O meu primeiro exemplo não deu certo?

[code]private DefaultTableCellRenderer ioRender = new DefaultTableCellHeaderRenderer();
private JTable table;
public minhaClasse(){

table=new JTable(9,3){
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int vColIndex) {
Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
if (vColIndex % 2 == 0 && !isCellSelected(rowIndex, vColIndex)) {
c.setBackground(Color.yellow);
} else {
c.setBackground(getBackground());
}
return c;
}
};
table.setSize(600,200);
table.setLocation(42,80);
table.setFont(new Font(“arial”,Font.PLAIN,15));
table.setRowHeight(25);
add(table);
completaTabela();
}[/code]

Tchauzin!

eh que eu num quero fazer um metodo só pra aquilo…
não dah pra fazer daquele jeito?:

Na verdade você não tem um método para isso, você pode estender essa classe e passar ela posteriormente para todos as JTable que desejar sem precisar mexer mais no código ou escrever outros.

Faz assim:

[code]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.blue;
    background = Color.white;

  } else {
    foreground = Color.white;
    background = Color.blue;

  }

renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;

}
}[/code]

e nas suas classes que você tem um JTable que deseja pintar de “zebrinha” chame esse código:

TableCellRenderer renderer = new MeuRenderer(); table.setDefaultRenderer(Object.class, renderer);

Até mais.

[quote=jgavazzisp]Na verdade você não tem um método para isso, você pode estender essa classe e passar ela posteriormente para todos as JTable que desejar sem precisar mexer mais no código ou escrever outros.

Faz assim:

[code]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.blue;
    background = Color.white;

  } else {
    foreground = Color.white;
    background = Color.blue;

  }

renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;

}
}[/code]

e nas suas classes que você tem um JTable que deseja pintar de “zebrinha” chame esse código:

TableCellRenderer renderer = new MeuRenderer(); table.setDefaultRenderer(Object.class, renderer);

Até mais.
[/quote]

Implementei está código mas só esta a fazer para as duas primeira colunas!
Será que tem a ver com jTableDetails.setDefaultRenderer(Object.class, renderer);

Obrigado!

1 curtida