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:
Connectioncon=newConexao_Central().Conexao();try{Statementstm=con.createStatement();//variável para incrementar o nome do checkboxintcont=1;ResultSetrs=stm.executeQuery("select sum(*) from pdv");while(rs.next()){//nome padrão dos check'sJCheckBoxnomecheck="check"+cont++;//isso que não funciona, dar um valor para o nomenomecheck=newJCheckBox();//no set bounds tbm vai ser feito um incremento nomecheck.setBounds(49,156,97,23);contentPane.add(nomecheck);}con.close();}catch(Exceptione1){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.
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
entanglement
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
P
pvinck
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!!!
E
entanglement
“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. )
packageguj;importjava.awt.BorderLayout;importjava.awt.EventQueue;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.ArrayList;importjava.util.List;importjavax.swing.BoxLayout;importjavax.swing.JButton;importjavax.swing.JCheckBox;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.border.EmptyBorder;publicclassAdicionarCheckboxesDinamicamenteFrameextendsJFrame{privateJPanelcontentPane;privateJPanelpanel;privateJPanelpanel_1;privateJButtonbtnAdicionarCheckbox;privateJButtonbtnRemoverCheckbox;privateJButtonbtnRemoverTodos;privateList<JCheckBox>checkboxes=newArrayList<JCheckBox>();/** * Launch the application. */publicstaticvoidmain(String[]args){EventQueue.invokeLater(newRunnable(){publicvoidrun(){try{AdicionarCheckboxesDinamicamenteFrameframe=newAdicionarCheckboxesDinamicamenteFrame();frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}}});}/** * Create the frame. */publicAdicionarCheckboxesDinamicamenteFrame(){setTitle("Adicionar Checkboxes Dinamicamente");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100,100,450,300);contentPane=newJPanel();contentPane.setBorder(newEmptyBorder(5,5,5,5));contentPane.setLayout(newBorderLayout(0,0));setContentPane(contentPane);contentPane.add(getPanel(),BorderLayout.CENTER);contentPane.add(getPanel_1(),BorderLayout.SOUTH);}privateJPanelgetPanel(){if(panel==null){panel=newJPanel();panel.setLayout(newBoxLayout(panel,BoxLayout.Y_AXIS));}returnpanel;}privateJPanelgetPanel_1(){if(panel_1==null){panel_1=newJPanel();panel_1.add(getBtnAdicionarCheckbox());panel_1.add(getBtnRemoverCheckbox());panel_1.add(getBtnRemoverTodos());}returnpanel_1;}privateintindiceCheckbox=0;privateJButtongetBtnAdicionarCheckbox(){if(btnAdicionarCheckbox==null){btnAdicionarCheckbox=newJButton("Adicionar Checkbox");btnAdicionarCheckbox.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){JCheckBoxcheckBox=newJCheckBox();indiceCheckbox++;checkBox.setText(String.format("Combo id # %d",indiceCheckbox));panel.add(checkBox);// adiciona o componente criado ao panel...checkboxes.add(checkBox);// e à listapanel.validate();panel.repaint();// redesenha o painel para mostrar o novo checkbox}});}returnbtnAdicionarCheckbox;}privateJButtongetBtnRemoverCheckbox(){if(btnRemoverCheckbox==null){btnRemoverCheckbox=newJButton("Remover Checkbox");btnRemoverCheckbox.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){if(checkboxes.size()>0){// Vamos remover o último, por exemplo// Primeiramente vamos achar o último elemento...JCheckBoxcheckBox=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();}}});}returnbtnRemoverCheckbox;}privateJButtongetBtnRemoverTodos(){if(btnRemoverTodos==null){btnRemoverTodos=newJButton("Remover Todos");btnRemoverTodos.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){for(JCheckBoxcheckbox:checkboxes){panel.remove(checkbox);// remove os componentes do panel}checkboxes.clear();// limpa a listapanel.validate();panel.repaint();// redesenha o painel para mostrar o novo checkbox}});}returnbtnRemoverTodos;}}
P
pvinck
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
P
pvinck
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!