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,
[code] 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;
}
}
[/code]