Cores JTABLE

2 respostas
zzzhhh

Ola amigos,
Gostaria de uma pequena ajuda com uma jtable estou tendo algumas dificuldades de fazer cores alternadas numa jtable quando e executado esse botao gera uns 200 registro e com cores alternadas facilitaria muito se algum puder ajudar agradeço muito

private void bt_ListarActionPerformed(java.awt.event.ActionEvent evt) {                                          
// BOTAO LISTAR
     Conecta con = new  Conecta(); //chama o conecta
       
        
        
        
        boolean pesquisa = true; 
        //ResultSet RS= con.consulta("SELECT * FROM agenda WHERE nome='" +nome + "' ");//Pesquisa o mesmo nome
        ResultSet RS= con.consulta("SELECT * FROM agendapessoal order by Nome");
        // jTable1.getTableHeader().setResizingAllowed(true);//redimensionar true - false
        //int rows = 3;    int cols = 3;    JTable table = new JTable(rows, cols);    
        



boolean[] canEdit = new boolean [] {   
                false, false, false,false 
            };
     
       
        tb_Listagem.setModel(   
            new DefaultTableModel(   
                new Object[] []{ },   
                new String[] {"Codigo", "Nome", "Cidade","Telefone",}   
        ) {   
  
   public boolean isCellEditable(int row, int col) {   
           return false;   
   }   
    
   }   
); 
   
        tb_Listagem.getColumnModel().getColumn(0).setPreferredWidth(5);
        tb_Listagem.getColumnModel().getColumn(1).setPreferredWidth(250);
        tb_Listagem.getColumnModel().getColumn(2).setPreferredWidth(70);
        tb_Listagem.getColumnModel().getColumn(3).setPreferredWidth(70); 
        
        ListSelectionModel listMod =  tb_Listagem.getSelectionModel();
        tb_Listagem.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);   
        tb_Listagem.setColumnSelectionAllowed(false);
        tb_Listagem.setRowSelectionAllowed(true);
       // listMod.addListSelectionListener(this);  
        
      
         
                 
        //cria o dtm + jTable1
        javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel) tb_Listagem.getModel();
        //tb_Pesquisa.setCellSelectionEnabled(false);  
        //tb_Pesquisa.getTableHeader().setReorderingAllowed(false);
        //tb_Pesquisa.setSelectionForeground(Color.BLACK); 
        try
        {
            while (RS.next())
            {
                dtm.addRow(new Object[] {
                    RS.getInt("idAgenda"),RS.getString("Nome"),RS.getString("Cidade"),RS.getString("TelCasa")}
                
                );
                pesquisa = false;
            }
            if(pesquisa) 
            {    
                JOptionPane.showMessageDialog(this,"Nenhum Registro Encontrado","Dados N�o Localizados",JOptionPane.WARNING_MESSAGE);
            }
        }
        catch( SQLException ex )
        {
            JOptionPane.showMessageDialog(null, "SQLException2: " + ex.getMessage() );
        }
       
}

2 Respostas

devel.andrerocha

Dá uma olhada aqui
http://elliotth.blogspot.com/2004/09/alternating-row-colors-in-jtable.html

ajfilho

Bom, você tem que criar uma Classe para renderizar as células de sua tabela:

Eu faço mais ou menos assim:

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;

/**
 *
 * @author AJFILHO
 */
public class CellRenderer extends DefaultTableCellRenderer implements TableCellRenderer {

    public CellRenderer() {
        super();
    }

    @Override
    public void setHorizontalAlignment(int alignment) {
        super.setHorizontalAlignment(alignment);
    }
    
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        Component renderer = super.getTableCellRendererComponent(
                table, value, isSelected, hasFocus, row, column);
        ((JLabel) renderer).setOpaque(true);
        Color foreground, background;
        if (isSelected) {
            foreground = Color.white;
            background = Color.blue;
        } else {
            if (row % 2 == 0) {
                foreground = Color.black;
                background = Color.white;
            } else {
                foreground = Color.white;
                background = Color.darkGray;
                
            }
        }
        renderer.setForeground(foreground);
        renderer.setBackground(background);
        return renderer;
    }

    @Override
    public void validate() {
    }

    @Override
    public void revalidate() {
    }

    @Override
    protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
    }

    @Override
    public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
    }
}

Depois é só chamar na hora de instanciar o Model da sua tabela

Abraços!

Criado 9 de dezembro de 2008
Ultima resposta 10 de dez. de 2008
Respostas 2
Participantes 3