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);
}
}
}));
}




4 comentários:
Parabéns pela gambiarra!
quando aprendemos a utilizar orientação a objetos e a combinar elementos do Java, não se trata de gambiarra, e sim de conhecimento.
se fosse assim, uma boa gambiarra seria a criação do JCombobox, que na verdade é a combinação de um JListBox e um JTextField.
chow de bola!!!!!
Parabéns, pelo código, muito bem implementado, não de bola para criticas.
Postar um comentário