Pegar seleção do JComboBox

Ola galera, seguinte.

Eu estou criando uma tela no java, onde ela vai crescer ou diminiuir conforme a quantidade de itens na array certo? Fiz e ta funcional, porém, não consigo capturar o valor das JCombobox geradas. Se eu mando o getSelect, ele pega apenas o do ultimo JCombobox. Tem alguma forma de fazer ele pegar um a um? Se não tiver, vcs teriam alguma idéia para gerar os JCombobox? Segue meu código. Abraços galera.

	int i = 0;
		int y = 20;
		while(i<bd.size()) {
		String nome = bd.get(i).getNome();

		JLabel lblNome = new JLabel(nome);
		lblNome.setBounds(10, y, 46, 14);
		
		
		JComboBox<Integer> comboBox = new JComboBox<Integer>();
		comboBox.setBounds(212, y, 50, 20);
		
		int itens = 0;
		while (itens <= Integer.parseInt(bd.get(i).getQuantidade())) {
			comboBox.addItem(itens);
			itens++;
		}


		
		frame.getContentPane().add(comboBox);
		frame.getContentPane().add(lblNome);
					
		
		i++;
		y = y+40;
		System.out.println(comboBox.getSelectedItem());
		}

o getSelectItem ele vai pegar apenas o selecionado, eu não lembro se ele tem um comando que retorna uma lista, mas da para pelo menos você fazer um for percorrendo da primeira posição do JComboBox até seu tamanho que você pega com o size e então da um getItemAt(i);
Combo box não é uma boa para mexer com listas, ele serve apenas para alguém selecionar uma opção entre várias, foi feito para retorno único.

@JoeReis, amigo, não entendi o que você quer fazer com está classe, mas ela nunca vai pegar todos os combobox, para isto você vai precisar fazer outro loop só para ler e imprimir os valores de cada campo. Explica melhor qual resultado que você espera com isto.

Eu acho que você está precisando usar uma tabela.

Assim. O codigo ele esta pegando uma array de objetos. Para cada item dessa array, ele coloca no frame uma linha com combobox. E até ae funciona. Aparece o itens no combobox, mas eu não consigo pegar o valor que o user seleciona em cada combobox, consigo apenas do ultimo. Dei um control c na tela que gera aqui image

para toda vez que ele alterar mostrar o novo você tem que colocar um listerner no ComboBox, você também pode fazer essa alteração quando o usuário clica no botão, ai é só usar o que você já estava usando o getSelectedItem;

pelo que eu vi no seu código a exibição do selecionado é na mesma hora que você adiciona, por isso ele vai aparecer apenas o ultimo adicionado, você tem que chamar esse System.out.println(comboBox.getSelectedItem()); depois que o usuário apertar o botão.

ja testei dessa forma e não funciona, ele pega apenas o ultimo valor.

Posta então todo seu código que faco o teste aqui, e as alterações necessárias.

Vender2.java (2,7 KB)
AbrirCaminho.java (2,0 KB)
Cadastro.java (749 Bytes)
Principal.java (1004 Bytes)

Cadastro.class (1,1 KB)
Principal.class (905 Bytes)
AbrirCaminho.class (2,2 KB)
Vender2.class (3,3 KB)

Cara…na classe AbrirCaminho, vc tem que mudar String caminho para o endereço de uma pasta local da sua maquina.

Então vc descomenta a parte do principal, cadastra uns 2 itens e vai em seguida vai ao vender2 e executa.

Vai dar um trampo cara. Vlws pela ajuda.

Faz uma alteração na sua classe Vender2 conforme o que vou passar abaixo:

btnNewButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					for(Component c : frame.getContentPane().getComponents()){
                                                if(c instanceof JComboBox){               
                                                    System.out.println(((JComboBox) c).getSelectedItem());
                                                }
        }
                                        }
			});

Vou explicar um pouco do que encontrei no seu código. Primeiro você declara variáveis dentro do while e queria reaproveita-las depois, o que não tem como. O certo seria você criar um arrayList do tipo JComboBox antes do while e depois fazer algumas alterações pequenas dentro do while que você conseguiria arpoveitar depois. Outra coisa que vi é o uso de JLable e JComboBox onde era melhor usar um jTable, o que reduziria código e ficaria mais fácil da pessoa selecionar que ela queria em vender, olha que no código você já tinha usado um ArrayList então sabe usar. Você també usou um JFrame sem um Panel, o que não é muito bom, o certo é você adicionar um Panel no JFrame e depois os componentes nesse Panel.
Na linha que eu alterei, como uma maneira mais rápida de você conseguir acessar os dados do JComboBox, eu usei um for do estilo for…each, que pega cada componente que existe no seu for, JLable, JComboBox(e se tivessem outros também pegaria, como JTextField) e a cada iteração ele coloca o componente na variável c, depois eu verifico com o if se c é uma instancia de JComboBox e se for eu mandei imprimir o valor selecionado pelo usuário, nos testes aqui deu certo.

@JoeReis Amigo,agora entendi o que você precisa o código que o @Heitor_Veloso postou está correto e é exatamente o que você precisa fazer, porém não recomendo fazer uma chamada de todos os componentes do JFrame sobrecarrega o método sem necessidade, são poucos itens.

O que você precisa fazer é adicionar uma chamada anônima de ActionListener no botão pegando o valor selecionado de cada combobox e imprimir na tela.

Não entendi muito bem o que você quer fazer mais eu refiz o código.

Vender.form (7,1 KB)
Vender.java (9,4 KB)
Cadastro.java (1016 Bytes)
AbrirCaminho.java (2,9 KB)
Principal.java (206 Bytes)

Eu só fiz daquele jeito para solucionar o problema, mas a melhor solução para ele era usar um jtable, ou se quisesse manter como esta, pelo menos usar um arraylist.

Cara, obrigado mesmo pela ajuda. Eu vou usar a base do seu para configurar o meu. A solução do @Heitor_Veloso deu certo, obrigado a ambos. Espero um dia poder ajudar a galera tb.

Abraços.