CheckBox criado dinamicamente com checked = true não insere o nome no ArrayList

Pessoal, a ideia é que quando o usuário escolher um campo identificado no checkbox o sistema deverá inserir o texto do checkbox no ArrayList. Mas esta pegando apenas o ultimo nome do ultimo checkbox.

public void listarOpcoesDeCampos() {
//para manipular o arrayList de campos voce dever criar outro arrayList para recebe-lo e assim com lst.get(0) chamar o campo desejado
lstCamposRetornados = retornarNomesCampos(); //retornando o codigo -> lstCamposRetornados.get(0) -> este procedimento me da acesso a qdeColunas tb

    //definindo o posicionamento dos checksbox dos campos
    int pos_coluna = 50, pos_linha = 40, tam_linha = 250, alt_linha = 30;

    for (int i = 0; i < qdeColunas; i++) {
        //criando e mostrando um checkbox com o nome da coluna da tabela
        chk = new JCheckBox();
        chk.setBounds(pos_coluna, pos_linha, tam_linha, alt_linha);
        c.add(chk);
        c.repaint();
        chk.setText(retornarNomesCampos().get(i));         //setando o nome da coluna no checbox            
        
        //registrando o objeto que sofrerá ação
        chk.addActionListener(this);
        
        //se posicionando para criacao do proximo checkbox
        pos_coluna = 50;
        pos_linha = pos_linha + 20;
    }
           
}

@Override
public void actionPerformed(ActionEvent e) {
lstListaCampos.add(chk.getText());
}

Fiz um laço for para visualizar o que a lista contem e percebi que esta pegando somente o último ítem

saída atual:
campo OBS
campo OBS

A saida desejada é:
campo CODIGO
campo OBS

Ou seja no ArrayList deverá conter apenas os ítens(checkbox) selecionados.

O problema não é na leitura dos dados do arraylist, mas, na inserção.

muda para chk.getSelectedItem(), pois JCeckBox é diferente de JTextField.

Ao clicar no ponto não aparece a opção de getSelectedIem().