JTableHeader com JCheckBox

0 respostas
K

Boa tarde, gostaria de uma opinião, ainda sou muito "cru" em java e precisei colocar um checkbox no cabeçalho da tabela, li o manual e criei um HeaderRenderer como segue abaixo, ele esta funcionando como preciso, mas isso não quer dizer q possa estar totalmente certo ou que não existe uma forma mais facil e pratica, se puderem ajudar agradeço.

Abs,

public class SgiCellCheckBoxRenderer extends JCheckBox implements TableCellRenderer {

        public SgiCellCheckBoxRenderer() {
            super();
            this.setOpaque(true);
            this.setSelected(false);
            this.setBackground(tbTabela.getTableHeader().getBackground());
            
            tbTabela.getTableHeader().addMouseListener(new MouseListener() {
                SgiCellCheckBoxRenderer scbr = SgiCellCheckBoxRenderer.this;
                
                @Override
                public void mouseClicked(MouseEvent e) {
                    // Acessa os metodos da tabela
                    SgiTable stb = (SgiTable) ((JTableHeader)e.getSource()).getParent().getParent();
                    // Só libera checkbox se a tabela contiver dados
                    if (!stb.isEmpty()) {
                        // Marca ou desmarca linha do Header
                        scbr.setSelected(!isSelected());
                        // Marca ou desmarca todas as linhas da tabela
                        stb.setRowMarkedAll(isSelected());
                        // Atualiza contador de linhas marcadas
                        stb.nTotMarcadas = (isSelected()?nTotColunas:0);
                    }                    
                }

                @Override
                public void mousePressed(MouseEvent e) {
                }

                @Override
                public void mouseReleased(MouseEvent e) {
                }

                @Override
                public void mouseEntered(MouseEvent e) {
                }

                @Override
                public void mouseExited(MouseEvent e) {
                }
            });
        }
        
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            return this;
        }
    }
Criado 31 de julho de 2015
Respostas 0
Participantes 1