Check Dinâmico com swing

6 respostas
P

Olá pessoal,
Estou com uma dúvida de como fazer uma função do meu software.

preciso procurar no banco algumas informações e dependendo da quantidade de
registros que a tabela me retornar eu criaria checkBox para essas informações.

EX:

Connection con=new Conexao_Central().Conexao();
				
				try{
					
					Statement stm=con.createStatement();
					
					//variável para incrementar o nome do checkbox
					int cont=1;
					
					ResultSet rs=stm.executeQuery("select sum(*) from pdv");
					
					while(rs.next()){
						//nome padrão dos check's
						
						JCheckBox nomecheck = "check"+cont++; //isso que não funciona, dar um valor para o nome
						nomecheck= new JCheckBox();
						
						//no set bounds tbm vai ser feito um incremento						
						nomecheck.setBounds(49, 156, 97, 23);
						contentPane.add(nomecheck);
						
						
					}
					 con.close();
			    }catch(Exception e1){
			    	System.out.println("Erro: " + e1.getMessage()); 
			    }

O Problema: para adicionar vários pelo código que adicionei teria que incrementar o nome de cada checkBox.
mas como esperado ele não deixa por causa dos tipos string e JcheckBox são diferentes.

Se alguém tem alguma ideia, ou já fez algo assim…
obs: o try ta aparecendo só “ry”, no meu código ta correto.

Obrigado

6 Respostas

J

Olá,

tenta usar a função setMnemonic.

Tenta também não misturar a camada de acesso ao banco (DAO) com a de visualização, isso ai vai dar um trabalhão para fazer ajustes lá na frente.

abraço

E

Se você tem uma coleção de componentes (como JCheckBox ou JTextField) que foi criada dinamicamente em um JFrame ou JPanel, crie uma variável membro no seu JFrame, como List chexboxes = new ArrayList() , e então adicione os combos a essa lista.

Não largue os checkboxes soltos (como você está tentando fazer) porque senão você não consegue achá-los mais :slight_smile:

P

Olá,

entendi o esquema do list, mas não consegui adicionar checks na lista!!

não teria algum código pra min ter como base, dai só adéquo ele com o código do banco de dados.

obrigado pelas dicas até então!!!

:smiley:

E

“min ter” é coisa de índio de filme americano. De qualquer maneira, rode este exemplo e veja como é que é fácil você adicionar checkboxes dinamicamente. (A propósito, eu não pus um JScrollPane nesse exemplo, mas acho que seria necessário se você precisar mostrar muitos dados. )

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class AdicionarCheckboxesDinamicamenteFrame extends JFrame {

    private JPanel contentPane;
    private JPanel panel;
    private JPanel panel_1;
    private JButton btnAdicionarCheckbox;
    private JButton btnRemoverCheckbox;
    private JButton btnRemoverTodos;
    private List<JCheckBox> checkboxes = new ArrayList<JCheckBox>();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AdicionarCheckboxesDinamicamenteFrame frame = new AdicionarCheckboxesDinamicamenteFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public AdicionarCheckboxesDinamicamenteFrame() {
        setTitle("Adicionar Checkboxes Dinamicamente");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        contentPane.add(getPanel(), BorderLayout.CENTER);
        contentPane.add(getPanel_1(), BorderLayout.SOUTH);
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        }
        return panel;
    }

    private JPanel getPanel_1() {
        if (panel_1 == null) {
            panel_1 = new JPanel();
            panel_1.add(getBtnAdicionarCheckbox());
            panel_1.add(getBtnRemoverCheckbox());
            panel_1.add(getBtnRemoverTodos());
        }
        return panel_1;
    }

    private int indiceCheckbox = 0;

    private JButton getBtnAdicionarCheckbox() {
        if (btnAdicionarCheckbox == null) {
            btnAdicionarCheckbox = new JButton("Adicionar Checkbox");
            btnAdicionarCheckbox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JCheckBox checkBox = new JCheckBox();
                    indiceCheckbox++;
                    checkBox.setText(String.format("Combo id # %d", indiceCheckbox));
                    panel.add(checkBox); // adiciona o componente criado ao panel...
                    checkboxes.add(checkBox); // e à lista
                    panel.validate();
                    panel.repaint(); // redesenha o painel para mostrar o novo checkbox
                }
            });
        }
        return btnAdicionarCheckbox;
    }

    private JButton getBtnRemoverCheckbox() {
        if (btnRemoverCheckbox == null) {
            btnRemoverCheckbox = new JButton("Remover Checkbox");
            btnRemoverCheckbox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if (checkboxes.size() > 0) {
                        // Vamos remover o último, por exemplo
                        // Primeiramente vamos achar o último elemento...
                        JCheckBox checkBox = checkboxes.get(checkboxes.size() - 1);
                        // Agora vamos removê-lo do panel...
                        panel.remove(checkBox);
                        // e da lista também!
                        checkboxes.remove(checkBox);
                        panel.validate();
                        panel.repaint();
                    }
                }
            });
        }
        return btnRemoverCheckbox;
    }

    private JButton getBtnRemoverTodos() {
        if (btnRemoverTodos == null) {
            btnRemoverTodos = new JButton("Remover Todos");
            btnRemoverTodos.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    for (JCheckBox checkbox : checkboxes) {
                        panel.remove(checkbox); // remove os componentes do panel
                    }
                    checkboxes.clear(); // limpa a lista
                    panel.validate();
                    panel.repaint(); // redesenha o painel para mostrar o novo checkbox
                }
            });
        }
        return btnRemoverTodos;
    }
}
P

valeu a correção… rsrsrs

Bah cara, valeu mesmo!!!

não vai precisar do Scroll, pois, não são tantos dados no caso.

vou adaptar a minha realidade com os dados do DB.

Obrigado :smiley:

P

entanglement,

funcionou certinho como queria, a partir do banco de dados carregando certo!!

porém agora não consegui capturar o índice do checkBox selecionado!!!

alguma função para isso também?? tentei usar a do remover check, mas não achei um jeito de pegar o selecionado!

Obrigado

Criado 10 de setembro de 2012
Ultima resposta 12 de set. de 2012
Respostas 6
Participantes 3