Uma opção também é usar o Tema Nimbus que já aplica isso nas tabelas.
Eu uso essa classe em meus projetos p/ alternar a cor das linhas de uma tabela, facilitando a visualização do usuário na grade de Dados.
Exemplo :
![]() |
tabela carregada sem itens selecionados |
![]() |
tabela com os itens selecionados |
http://mario.portari.com.br/~surfer/blog/colorir_jtable.swf
Classe ColorRender que extende a classe DefaultTableCellRenderer
/* * Colorindo jTable.java * Pintas as tabelas alterando as linhas * Destaca uma linha se o checkbox da linha for selecionado * Author : Mario Cezzare Angelicola Chiodi * mcezzare@gmail.com */ package lib; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class ColorRender extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // seta o resultado p/ falso porque isso sera usado em varias Jtables do sistema boolean result = false; try{ // no nosso exemplo if (table.getName() != null) { // p/ não escrever um null cada vez que carregar uma célula if (table.getName().equals("jTable1")) { result = (Boolean) table.getModel().getValueAt(row, 3); } if (table.getName().equals("titulosAutorizacao")) { result = (Boolean) table.getModel().getValueAt(row, 6); } } } catch (java.lang.NullPointerException ex){ System.out.println(ex.getMessage()); } //se for uma linha selecionada if (isSelected) { setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } else { // se o checkbox estiver selecionado // pinta a linha inteira if (result) { setBackground(Color.YELLOW); setForeground(Color.RED); setFont(new Font("Verdana",Font.BOLD,10)); } else { // se não , colore alternado as linhas if (row % 2 == 0) { setBackground(Color.LIGHT_GRAY); setForeground(Color.black); } else { setBackground(Color.WHITE); setForeground(Color.black); } } } return this; } }
Frame testTable
//Colorindo jTable.java //Author : Mario Cezzare Angelicola Chiodi // mcezzare@gmail.com package tests; import javax.swing.table.DefaultTableModel; import lib.ColorRender; public class testTable extends javax.swing.JFrame { /** * Creates new form testTable */ public testTable() { initComponents(); carregaTabela(); } public final DefaultTableModel modelo =new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "ID", "NOME", "EMAIL", "ATIVO" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class }; boolean[] canEdit = new boolean [] { false, false, false, true }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }; private void carregaTabela() { // apenas para dar carga na tabela String [] nomes={"AAA","BBB", "CCC","DDD", "EEE","FFF", "FFF","HHH" }; for (int i=0;i<8;i++){ Object[] row = new Object[4]; row[0]=i; row[1]=nomes[i]; row[2]=nomes[i].toLowerCase()+"@email.org"; row[3]=false; modelo.addRow(row); } jTable1.setModel(modelo); // fim da carga // a grande manha para funcionar, especifique um nome p/ a JTable jTable1.setName("jTable1"); // aplica o ColorRender na tabela jTable1.setDefaultRenderer(Object.class, new ColorRender()); jLbTotal.setText(jTable1.getRowCount()+""); } private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jLabel1 = new javax.swing.JLabel(); jLbTotal = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Teste Colorir tabela"); jScrollPane1.setViewportView(jTable1); jLabel1.setText("Total de Usuários:"); jLbTotal.setText("0"); jLbTotal.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); jLabel2.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N jLabel2.setForeground(new java.awt.Color(0, 0, 255)); jLabel2.setText("exemplo de Mario Cezzare - mcezzare@gmail.com"); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addContainerGap()) .add(layout.createSequentialGroup() .add(jLabel1) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jLbTotal) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 23, Short.MAX_VALUE) .add(jLabel2) .add(14, 14, 14)))) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 222, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jLabel1) .add(jLbTotal) .add(jLabel2)) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); } /** * @param args the command line arguments */ public static void main(String args[]) { // Set the Nimbus look and feel //* If Nimbus (introduced in Java SE 6) is not available, stay with the //* default look and feel. For details see //* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html // try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(testTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } /* * Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new testTable().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLbTotal; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration }------------------------------------------------------------
Nenhum comentário:
Postar um comentário