JCheckBox no Cabeçalho de uma JTable
Postado por ugleiton dia 17 de setembro de 2010 as 13:23
Procedimento em java:
- Criar uma classe para o método setHeaderRenderer do TableColumn
- Criar um Método para setar o HeaderRenderer
/* * PhDCheckHeader.java * * Created on 17/09/2010, 15:32:51 */ package componente; import java.awt.Component; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JCheckBox; import javax.swing.JTable; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; /** * * @author Ugleiton */ public class PhDCheckHeader extends JCheckBox implements TableCellRenderer, MouseListener { protected PhDCheckHeader rendererComponent; protected int column; protected boolean mousePressed; public PhDCheckHeader(ItemListener itemListener) { setText(""); setOpaque(true); rendererComponent = this; rendererComponent.addItemListener(itemListener); this.setSelected(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (table != null) { JTableHeader header = table.getTableHeader(); if (header != null) { header.addMouseListener(rendererComponent); } } setColumn(column); return rendererComponent; } protected void setColumn(int column) { this.column = column; } public int getColumn() { return column; } protected void handleClickEvent(MouseEvent e) { } public void mouseClicked(MouseEvent e) { if (mousePressed) { mousePressed = false; JTableHeader header = (JTableHeader) (e.getSource()); JTable tableView = header.getTable(); TableColumnModel columnModel = tableView.getColumnModel(); int viewColumn = columnModel.getColumnIndexAtX(e.getX()); int coluna = tableView.convertColumnIndexToModel(viewColumn); if (viewColumn == getColumn() && e.getClickCount() == 1 && coluna != -1) { doClick(); } } ((JTableHeader) e.getSource()).repaint(); } public void mousePressed(MouseEvent e) { mousePressed = true; } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }
public void colunaCheck(){ TableColumn tc = table.getColumnModel().getColumn(COL_CHECK); tc.setCellEditor(table.getDefaultEditor(Boolean.class)); tc.setCellRenderer(table.getDefaultRenderer(Boolean.class)); tc.setHeaderRenderer(new PhDCheckHeader(new ItemListener() { public void itemStateChanged(ItemEvent e) { //ações quando clicar no check Object source = e.getSource(); if (source instanceof AbstractButton == false) { return; } boolean check = e.getStateChange() == ItemEvent.SELECTED; int coluna = 0; for (int i = 0; i < table.getRowCount(); i++) { table.setValueAt(new Boolean(check), i, coluna); } } })); }