JCheckBox dinâmico com Swing

Olá galera, sou novo no GUJ e em Java tô começando agora.

Estou fazendo um cadastro de produtos aqui para a empresa e preciso selecionar os impostos que incidem sobre o preço dos produtos. Esses impostos são carregados diretamente da tabela taxas_impostos do BD. O usuário do sistema então indica quais os impostos se referem aquele produto. Como pode ser mais de um imposto optamos por usar um checkbox que permite a seleção multipla.

Até ai tudo bem criei uma função criaCheckbox que traz os impostos direto do BD e cria as opções inserindo-as num JPanel. Agora, desde quinta-feira à noite que nos deparamos com o seguinte problema, como recuperar os checkboxs marcados pelo usuário, pois ao que parece todos os campos são criados com o mesmo nome. Abaixo o método que cria os checkbox

package com.dtsistem.geradm.produtos;

import com.dtsistem.geradm.cadastros.TaxaImposto;
import com.dtsistem.geradm.cadastros.TaxaImpostoBD;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JCheckBox;

/**
 *
 * @author Administrador
 */
public class ProdutosFrame extends javax.swing.JInternalFrame {
    private List<TaxaImposto> taxasimpostos;
    private JCheckBox jcbx;
    private ArrayList lista;
    /**
     * Creates new form ClienteFrame 
     */
    public ProdutosFrame() {
        initComponents();
        criaChekbox();
    }
    private int indicechk = 0;
    private void criaChekbox(){
        TaxaImpostoBD taxaimpostoBD = new TaxaImpostoBD();
        taxasimpostos = taxaimpostoBD.consultaTaxa();
        ArrayList lista = new ArrayList();
        
        if(taxasimpostos.size() > 0){
            for(int i=0; i<taxasimpostos.size(); i++ ){
                JCheckBox jcbx = new JCheckBox();
                indicechk++;
                jcbx.setText(String.format(taxasimpostos.get(i).getNome(), indicechk));
                jpnImpostos.add(jcbx);
                if(jcbx.isSelected()){
                    lista.add(jcbx);
                    
                }
                
            }
            
        }
        
    }

Quem puder me dar uma ajuda, fico muito agradecido.

Claudio Souza

Amigo, não entendi sua duvida.

Primeiramente, o seguinte if não tem necessidade pois voce já tem um ‘for’ seguinte que faz o mesmo teste…

if(taxasimpostos.size() > 0)

Outra coisa, você nunca vai encontrar dois objetos com o mesmo nome. Realmente, o que voce faz é cria-los toda vez dentro do ‘for’, porém, voce está adicionando eles na lista, entao voce recupera através da lista, certo?

Se voce precisar definir o nome desses checkbox, voce pode seta-los e quando for pega-los, voce utiliza a lista.

Não entendi muito bem sua duvida amigo, desculpa se nao ajudei…

Abraços

Gleidson, ajudou sim.

Só pra esclarecer. O if inicial eu coloquei pensando que o for só dispara se a consulta não for vazia. Se for redundante posso tirá-lo então que não fará diferença?

Com relação a recuperação dos dados é ai que estou tendo dificuldade. Não consigo recuperar o ArrayList lista com os dados. Como eu fiz para criá-los está correto? Se sim vou estudar mais Array para ver se consigo recuperar esses dados. De qualquer forma muito obrigado.

[quote=ClaudioSouza]Gleidson, ajudou sim.

Só pra esclarecer. O if inicial eu coloquei pensando que o for só dispara se a consulta não for vazia. Se for redundante posso tirá-lo então que não fará diferença?

Com relação a recuperação dos dados é ai que estou tendo dificuldade. Não consigo recuperar o ArrayList lista com os dados. Como eu fiz para criá-los está correto? Se sim vou estudar mais Array para ver se consigo recuperar esses dados. De qualquer forma muito obrigado.[/quote]

Pois entao, criar ArrayList não é muito utilizado.

Geralmente se cria assim:

List lista = new ArrayList();

Isso porque se voce precisar converter essa lista em outro tipo é mais facil do que voce utilizar ArrayList como está fazendo.

O if que voce colocou ele faz o mesmo teste, pois no for, se o valor do size() for menor que 0, ele nao vai entrar no for, correto?

O ArrayList que voce esta usando serve somente para dicionar os checkBox correto?

Utilize uma bean e os valores que voce retornar, jogue para a lista desse tipo de bean.

List<MeuBeanDeImpostos> lista = new ArrayList();

Para pegar os dados, depois voce vai percorrendo com um for dessa maneira.

lista.get(i).getMeuMetodoDoMeuBean(); //Onde o i é do for, ou seja, percorrerá toda a lista

Abraços