JCheckBox no Cabeçalho de uma JTable

Postado por ugleiton dia 17 de setembro de 2010 as 13:23


Procedimento em java:


  1. Criar uma classe para o método setHeaderRenderer do TableColumn
  2. /*
     * 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) {
        }
    }
    
  3. Criar um Método para setar o HeaderRenderer
  4. 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);
                    }
                }
            }));
        }
    
    
Fonte

4 comentários

Segurança

Postado por ugleiton dia 16 de setembro de 2010 as 06:35

0 comentários

Exemplo de Set do Java Collections

Postado por ugleiton dia 10 de setembro de 2010 as 11:55

Quando existe uma relação de pais e filhos entre tabelas de banco de dados o hibernate gera um objeto Hashset, para poder ter acesso aos filhos de uma tabela pai,
Para poder percorrer esses objetos gerados e guardados num Set, pode-se usar o exemplo abaixo.


//criando o objeto Set
Set cores = new HashSet(0);

//adicionando elementos ao objeto
cores.add("azul");
cores.add("amarelo");
cores.add("verde");

//criando o objeto iterator para poder percorrer o Set
Iterator it = cores.iterator();

//imprimindo os objetos
while (it.hasNext()) {
 String cor = (String) it.next();
 System.out.println(cor);
}



Definição de Set

Interface que define uma coleção, ou conjunto, que não contém duplicatas de objetos. Isto é, são ignoradas as adições caso o objeto ou um objeto equivalente já exista na coleção. Por objetos equivalentes, entenda-se objetos que tenham o mesmo código hash (retornado pelo método hashCode()) e que retornem verdadeiro na comparação feita pelo método equals().
Não é garantida a ordenação dos objetos, isto é, a ordem de iteração dos objetos não necessariamente tem qualquer relação com a ordem de inserção dos objetos. Por isso, não é possível indexar os elementos por índices numéricos, como em uma List.

3 comentários

JFrame com fundo degradê

Postado por ugleiton dia 3 de setembro de 2010 as 11:17

Crie a Classe BasicPanelUI

package look;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.plaf.basic.BasicPanelUI;

/**
 *
 * @author Ugleiton
 */
public class PanelFormUICinza extends BasicPanelUI {

    private Color corInicial = new Color(241, 241, 241);
    private Color corFinal = new Color(235, 235, 235);
    
    @Override
    protected void installDefaults(JPanel p) {
        p.setOpaque(true);
    }

    @Override
    public void paint(Graphics g, JComponent c) {
        Graphics2D g2 = (Graphics2D) g;

        Dimension vSize = c.getSize();

        int h = vSize.height;
        int w = vSize.width;

        g2.fillRect(0, 0, w, h);

        g2.setPaint(new GradientPaint(0, 0, corInicial, 0, h, corFinal));
        g2.fillRect(3, 0, w - 4, h - 2);

    }
}


Depois sete o UI no panel

jPanel.setUI(new PanelFormUICinza());

1 comentários

Marcadores

Computação (8) Java (7) Excel (2) Humor (2) NetBeans (2) Textos (2) Curiosidades (1) IRPF (1) Musicas (1)