ItemListener

10 respostas
L

Pessoal, fraga só meu código:

arrayComboBox[contCombo].addItemListener(new ItemListener() {
                            public void itemStateChanged(ItemEvent e) {
                                ComboBoxCodigoNome c = (ComboBoxCodigoNome) arrayComboBox[?].getSelectedItem();
                            }
                        });

Pois então, como podem ver, tenho um array de combo box que foi criado dinamicamente. Estou criando um ItemListener() para fazer algums settext de acordo com o combo selecionado.
O problema pessoal, é que eu não sei como pegar o ítem selecionado no meu combo, visto que não sei o índice do array.
Como resolver isso? Pensei em algo do tipo, passa na função ItemListener() um parâmetro, que seria o indice.

Obrigado

10 Respostas

fabim

Brother, o evento já te da essa informacao = e.getItem() - Returns the item affected by the event. (by javadoc)

Tente esquecer a programacao estruturada (argumentos, parametros, funcoes, estruturas) e pense em objetos se relacionando

A

cara,

esse codigo abaixo nao resolve seu problema,

ComboBoxCodigoNome c = (ComboBoxCodigoNome) ((JComboBox)e.getSource()).getSelectedItem();

t+

L

Humm…certo pessoal!
Entendi o que disseram e testei aqui no meu sistem. Funcionou perfeitamente, consegui buscar a descrição referente ao meu combo selecionado.

Porém, sem querer abusar da boa vontade, o problema se extende um pouco, vejam.

Na verdade, eu simplesmente quero pegar o combo selecionado e informar o código referente aquela descrição em um jtextfield, o problema é que este jtextfield também esta em um array (lembrando que criei em arrays pois eles são criados dinamicamentes, eu não sei quando vai existir nem quantos).

Com isso, segue um pouco mais do meu código ok!

arrayComboBox[contCombo].addItemListener(new ItemListener() {
                            public void itemStateChanged(ItemEvent e) {
                                ComboBoxCodigoNome c = (ComboBoxCodigoNome) e.getItem();
                                arrayTextField[?].setText(c.getCodigo());
                            }
          });

Ta vendo este arrayTextField[?], pois bem, eu agora tenho a descrição do combo com a ajuda q vocês me deram, mas agora, como vou setar o textfield com o código que eu tenho dentro do meu objeto c criado?

lina

Oi,

Bom… teoricamente será sempre o ultimo TextField né? Se você estiver usando um modelo cascata. Logo, só pegar o .lenght();

Tchauzin!

fabim

Vc teria que ter uma co-relacao desse Item da Combo, com seus textFields.
Em vez de retornar getCodigo(), vc poderia retornar um objeto que tivesse o par codigo + nomeDoTextFieldAoQualSeraAplicadoOCodigo
Por exemplo um objeto X, no qual vc faria X.getCodigo() e X.getTextFieldName()

Entao vc percorreria seu array de textFields…

for (JTextField field: arrayTextFields) { if (field.getName().equalsIgnoreCase(x.getTextFieldName) { field.setText(x.getCodigo()); } }

Foi 1 pensamento rapido aqui, com certeza vao existir melhores solucoes…

A

cara,

se o seu textField estiver na mesma posição do combo selecionado nos seus respectivos arrays, basta fazer isso aqui

int posicao = 0;
		for(JComboBox combo : arrayCombo){
			if(combo == e.getSource()){
				ComboBoxCodigoNome c = (ComboBoxCodigoNome) e.getItem();
				arrayTextField[posicao].setText(c.getCodigo());
				
				break;
			}
			posicao++;
		}

t+

fabim

lina:
Oi,

Bom… teoricamente será sempre o ultimo TextField né? Se você estiver usando um modelo cascata. Logo, só pegar o .lenght();

Tchauzin!

Nao, com certeza nao é isso que ele quer. Ele quer co-relacionar os codigos com os TextFields.

L

Pessoal, muito obrigado pela ajuda de todos.
Desobri uma forma de fazer, não sei se a melhor, mas deu certo.
Vejam só.

arrayComboBox[contCombo].addItemListener(new ItemListener() {
                            public void itemStateChanged(ItemEvent e) {
                                ComboBoxCodigoNome c = (ComboBoxCodigoNome) e.getItem();
                                arrayTextField[c.getIdCampo()].setText(c.getCodigo());
                            }
                        });

O que fiz foi criar o índice de combo box dentro do meu objeto ComboBoxCodigoNome e trazer-lo novamente em minha função listener.

Muito obrigado pela ajuda de todos…grande abraço pessoal!

lina

fabim:
lina:
Oi,

Bom… teoricamente será sempre o ultimo TextField né? Se você estiver usando um modelo cascata. Logo, só pegar o .lenght();

Tchauzin!

Nao, com certeza nao é isso que ele quer. Ele quer co-relacionar os codigos com os TextFields.

Oi,

Então é só percorrer o Array de combos, achar o índice e usar o TextField.

Tchauzin!

fabim

Funciona. O unico problema é a manutencao pq manter coisas como essa que dependem de ordem especifica pra funcionar, costumam passar despercebidas.

Criado 14 de novembro de 2011
Ultima resposta 14 de nov. de 2011
Respostas 10
Participantes 4