Ajuda com ComboBox por favor

10 respostas
dambros

Bom dia,

Sou iniciante em Java e estou tentando desenvolver um trabalho para faculdade que é uma idéia de uma “Calculadora Imobiliária”.

Nessa calculadora trabalho com alguns outros ítens do swing, mas onde estou realmente tendo problemas é com os ComboBoxes.

Preciso fazer o seguinte:

Meu combobox tem 3 opções, por exemplo X, Y e Z. Quando o usuário selecionar X vai acrescer 10 reais na conta total, quando selecionar Y acresce 20 e Z 30.

Acontece que quando eu seleciono por exemplo X ele me exibe corretamente o valor 10, mas se eu for la e alterar essa escolha para Y, em vez de ele me mostrar 20, ele me mostra 30 (pois soma o valor anterior com o atual selecionado). E assim por diante. Cada nova escolha ele soma o valor da opção a conta total.

Assim sendo, gostaria de perguntar a vocês como posso fazer para que quando eu selecione uma outra opção meu valor seja somado de forma correta.

Vale lembrar que tem outros códigos dentro desse algoritmo incrementando essa conta, então não adianta eu zerar a variável cada vez que entrar no combobox.

Obrigado desde já!

10 Respostas

geovanebg

Se eu tiver entendido corretamente parece mais um erro de lógica…

faça a soma do valor so quando for calcular o resultado final da conta!

Ou então antes de somar o novo valor subtraia do resultado o valor anterior…

fiaux

Poste o código.

dambros

Achei que daria para entender sem o código, mas segue então o mesmo:

  • Código desnecessário, pois foi solucionado. E toda vez que eu abria a página o javascript travava meu IE devido ao código ser grande.
geovanebg

O problema está aqui:

//Listener dos ComboBoxes de Tipo e Área
		ComboArea.addActionListener(new java.awt.event.ActionListener(){
			public void actionPerformed(java.awt.event.ActionEvent evt){

				
				if((ComboTipo.getSelectedItem().equals("Casa Térrea")
						&&ComboArea.getSelectedItem().equals("Até 100m²"))==true){
					valor2 = 0;
					valor2 = 30000;
					
				}
				if((ComboTipo.getSelectedItem().equals("Casa Térrea")
						&&ComboArea.getSelectedItem().equals("de 100 à 200m²"))==true){
					valor2 = 0;
					valor2 = 45500;
					
				}else if((ComboTipo.getSelectedItem().equals("Casa Térrea")
						&&ComboArea.getSelectedItem().equals("+ de 200m²"))==true){
					valor2 = 0;
					valor2= 50000;
					
				}
			
				valor+=valor2;				
				TextFieldValor.setText(String.valueOf(valor));
				
				
			}

cara olha só...
tem três linhas sobrando no seu código
pois é inútil fazer isto:

valor2 = 0;
valor2= 50000;

vc pode apenas jogar o 50000 na variavel...

e depois vc soma valor desta variavel:
valor+=valor2;

sem retirar do valor total o valor anterior...

por exemplo este código faz esta subtração corretamente:

CheckEscritorio.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent evt) {
				if (CheckEscritorio.isSelected() == true){
					valor3 = 4500;
				}else{
					valor3 = - 4500;
				}
				valor += valor3;
				TextFieldValor.setText(String.valueOf(valor));
			}});
dambros

Essa última etapa usando Valor2 = 0 foi um tentativa que fiz para ver se receberia o valor correto.

Eu tentei fazer usando apenas a varíavel e depois somando como você falou, mas mesmo assim o valor sempre vai ser incrementado.

Se eu seleciono uma opção, ao selecionar a outra ele acresce o valro da segunda na primeira.

geovanebg

então é exatemente isto que você tem que modificar...

esta linha no início do método actionPerformed já corrige:

valor -= valor2;

então vai ficar assim:

//Listener dos ComboBoxes de Tipo e Área
		ComboArea.addActionListener(new java.awt.event.ActionListener(){
			public void actionPerformed(java.awt.event.ActionEvent evt){

				valor -= valor2;
				
				if((ComboTipo.getSelectedItem().equals("Casa Térrea")
						&&ComboArea.getSelectedItem().equals("Até 100m²"))==true){
					valor2 = 0;
					valor2 = 30000;
					
				}
				if((ComboTipo.getSelectedItem().equals("Casa Térrea")
						&&ComboArea.getSelectedItem().equals("de 100 à 200m²"))==true){
					valor2 = 0;
					valor2 = 45500;
					
				}else if((ComboTipo.getSelectedItem().equals("Casa Térrea")
						&&ComboArea.getSelectedItem().equals("+ de 200m²"))==true){
					valor2 = 0;
					valor2= 50000;
					
				}
			
				valor+=valor2;
				TextFieldValor.setText(String.valueOf(valor));
				
				
			}

logicamente retirando estas linhas valor2 = 0; que não servem pra nada!

dambros

Poutz cara perfeito, agora deu certo.

Já tava sem esperanças nisso daqui. Eu ainda não entendi a lógica disso, mas o que importa é que funcionou.

Eu achei que colocando como você fez, ele iria remover o valor logo na primeira entrada no método. Então eu ia começar com um déficit.

Mas relendo eu vejo onde eu me enganei.

O valor2 vale 0 no começo então na primeira passagem vai ser valor - 0, e so nas demais que começará ter impacto.

É isso não?

Muito obrigado.

geovanebg

Correto!

:slight_smile:

dambros

Aproveitando o tópico.

Como eu poderia implementar uma classe anônima em pelo menos um dos componentes?

Não entendo muito bem essa idéia de classe anônima.

Obrigado novamente.

geovanebg

Vc já está usando classe anônima no ComboArea…

ComboArea.addActionListener(new java.awt.event.ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt){} });

Criado 24 de setembro de 2008
Ultima resposta 24 de set. de 2008
Respostas 10
Participantes 3