Colorir linha sim, linha não em uma JTable

15 respostas
O

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

15 Respostas

L

Oi,

Seria um efeito zebrinha?

Tchauzin!

O

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

L

Oi,

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

Tchauzin!

E

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):

L

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!

L

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):

Oi,

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

Tchauzin!

O

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

S

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

E

lina:
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):

Oi,

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

Tchauzin!

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

L

Oi,

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

Obrigada!

Tchauzin!

O

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?

L

Oi,

O meu primeiro exemplo não deu certo?

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();
}

Tchauzin!

O

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

J

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:

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;

  }
}

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.

T
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:

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;

  }
}

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.

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!

Criado 2 de agosto de 2010
Ultima resposta 8 de dez. de 2011
Respostas 15
Participantes 6