Combobox para Combobox

5 respostas
B

Boa tarde, estou desenvolvendo um programinha para meu TCC (tudo que eu fiz até agora foi vendo video aulas, portanto eu não sei nada de java), ele utiliza dois três TextField e duas jComboBox, sendo essas duas combobox uma dependende da outra. O programa funciona da segunda maneira, no TextField 1 o operador digita um valor (peso), no TextField 2 digita outro valor (tempo), na jcombobox 1 o operador seleciona o tipo de fonte, na jcombobox 2 o operador selecina a frequencia dessa fonte, sendo que alguns tipos de fonte, o operador terá mais de uma frequencia para escolher. Eu preciso que quando o operador selecione uma dada frequencia no segundo combobox, o programa pegue esta frequencia e utilize a EFICIENCIA deste equipamento para esta frequencia para fazer um calculo, portanto o operador nao sabe dessa eficiencia, ele apenas seleciona tipo e frequencia do equipamento. Entao no final efetuar o calculo com peso, tempo e eficiencia do equipamento, mostrando o resultado que é a potencia do equipamento no TextField 3.

O que eu fiz até agora:

private void cbTipoActionPerformed(java.awt.event.ActionEvent evt) {                                       
      int posicion;
       
        posicion = cbTipo.getSelectedIndex();
       
        switch(posicion){
                case 0:
                    cbFreq.removeAllItems();
                    cbFreq.addItem("50 a 60 Hz");
                    break;
                    
                case 1:    
                    cbFreq.removeAllItems();
                    cbFreq.addItem("50 a 180 Hz");  
                    cbFreq.addItem("150 a 540 Hz");
                    break;
                    
                case 2:
                    cbFreq.removeAllItems();
                    cbFreq.addItem("1 kHz");
                    cbFreq.addItem("3 kHz");
                    cbFreq.addItem("10 kHz");
                    break;    
                  
                case 3:
                    cbFreq.removeAllItems();
                    cbFreq.addItem("500 Hz");
                    cbFreq.addItem("1 kHz");
                    cbFreq.addItem("3 kHz");
                    cbFreq.addItem("10 kHz");
                    break;
                    
                case 4:
                    cbFreq.removeAllItems();
                    cbFreq.addItem("200 a 500 kHz");
                    break;  
                    
                default:     
                    JOptionPane.showMessageDialog(null,"");
             
        }

http://imageshack.us/photo/my-images/98/combobox3.jpg/
http://imageshack.us/photo/my-images/52/combobox2.jpg/

Agradeço desde já.

5 Respostas

jonatha.chaves

Entendi sua dúvida, mas não entendi o que você quer pra resolve-la com isso que mostrou.

Se eu olhar só pra dúvida faria o seguinte:

final JComboBox cbFreq = new JComboBox();
		final JComboBox cbTipo = new JComboBox();
		cbTipo.addFocusListener(new FocusListener() {
			
			@Override
			public void focusLost(FocusEvent e) {
				int posicion;
			       
		        posicion = cbTipo.getSelectedIndex();
		       
		        switch(posicion){
		                case 0:
		                    cbFreq.removeAllItems();
		                    cbFreq.addItem("50 a 60 Hz");
		                    break;
		                    
		                case 1:    
		                    cbFreq.removeAllItems();
		                    cbFreq.addItem("50 a 180 Hz");  
		                    cbFreq.addItem("150 a 540 Hz");
		                    break;
		                    
		                case 2:
		                    cbFreq.removeAllItems();
		                    cbFreq.addItem("1 kHz");
		                    cbFreq.addItem("3 kHz");
		                    cbFreq.addItem("10 kHz");
		                    break;    
		                  
		                case 3:
		                    cbFreq.removeAllItems();
		                    cbFreq.addItem("500 Hz");
		                    cbFreq.addItem("1 kHz");
		                    cbFreq.addItem("3 kHz");
		                    cbFreq.addItem("10 kHz");
		                    break;
		                    
		                case 4:
		                    cbFreq.removeAllItems();
		                    cbFreq.addItem("200 a 500 kHz");
		                    break;  
		                    
		                default:     
		                    JOptionPane.showMessageDialog(null,"");
		             
		        }
		    }			
			@Override
			public void focusGained(FocusEvent e) {
				// TODO Auto-generated method stub
				
			}
		});

O que o código ai faz: Quando a pessoa selecionar algo no jCombobox de Tipo de Fonte ele irar setar os itens do jCombobox da Frenquência.

Espero que seja isso que deseja!

B

Desculpe se eu me expressei mal, o que eu não sei fazer é o operador selecionar uma frequencia, e eu utilizar a eficiencia para o calculo. Na imagem a seguir segue as eficiencias que eu teria que usar para o calculo.

Exemplo: seleciono fonte A, e frequencia 10, esta seleção possui eficiencia de 25%, entao eu iria utilizar 0.25 para fazer meu calculo.

http://imageshack.us/photo/my-images/26/eficienciaw.jpg/

jonatha.chaves

Melhor caminho seria ter isso salvo em banco de dados mas se num for possível uma forma que acredito que seja interessante você criar um enum para cada tipo de fonte contendo as frequências como contantes que possuem os valores da eficiência para organizar a busca da informação.

Código do enum:

public static enum enumMotorGenerator {
		_1KHZ(70), _3KHZ(75), _10KHZ(75);
		int eficiencia;
		enumMotorGenerator(Integer eficiencia) {
			this.eficiencia = eficiencia;
		}
		public int getEficiencia() {
			return eficiencia;
		}
	}

Para recuperar:

enumMotorGenerator._1KHZ.getEficiencia();

Ai em cada situação você teria a eficiência que precisa. Espero ter ajudado!

B

Eu consegui fazendo da seguinte maneira

private void btCalcularActionPerformed(java.awt.event.ActionEvent evt) {                                           

     String tipo = (String)cbTipo.getSelectedItem();
     String freq = (String)cbFreq.getSelectedItem();
     
     double diametro = Double.parseDouble(tfDiametro.getText());
     double espessura = Double.parseDouble(tfEsp.getText());
     double comprimento = Double.parseDouble(tfComp.getText());
     double tempo = Integer.parseInt(tfTempo.getText());
     double res = 0;
     
     if (tipo.equals("Sistema de Alimentação") && freq.equals("50 a 60 Hz")){
     res = (7.830*486*(865/tempo)*(comprimento/1000)*(3.141593/4)*(((diametro/1000)*(diametro/1000))-((diametro-2*espessura)/1000)*((diametro-2*espessura)/1000)))*1.2;
     }

Porém agora, em outro programa meu, estou tendo dificuldade em colocar apenas duas casas após da virgula no resultado. Segue abaixo o código fonte

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
 float a=Float.valueOf(jProf.getText());
        float cFmin=((5/a)*(5/a));
        float cFmax=((16/a)*(16/a));
        jFmin.setText(String.valueOf(cFmin));
        jFmax.setText(String.valueOf(cFmax));
    }
jonatha.chaves

Bem, minha dica foi com intuito de você organizar teu código dessa forma ai você centralizava a informação em uma classe de enums e não em condições ifs!

Enfim ai é contigo! :wink:

No seu segundo problema recomendo que não use primitivos.

Se for usar float mude pra classe Float se for usar double mude pra classe Double.

Pega seu numero e faça isso aqui que tu resolve:

java.text.DecimalFormat df = new java.text.DecimalFormat("0.##");
df.format(seuNumeroFloatOuDouble);

Detalhe importante ele faz arredondamento se estiver:

3.222
fica:
3.22

OU

3.229
fica:
3.23

Espero ter ajudado

Criado 4 de junho de 2012
Ultima resposta 6 de jun. de 2012
Respostas 5
Participantes 2