Dúvida com jComboBox ? {Resolvido}

6 respostas
magalli

Oii pessoal,
Gostaria de saber como faço para associar um jComboBox a outro jComboBox,
exemplo no frame tenho o jComboBox1 ele tem os items, A, B, C, D, E, F, G. Se o usuário selecionar o
item A então no jComboBox2 vai aparecer para ele selecionar 1, 2, 3, 4. Se ele selecionar o B então vai aparecer para ele selecionar 5, 6, 7, 8
e assim por diante uma associação de valores, é possível fazer isso??se sim como ?, brigada gente, ótimo feriado…

6 Respostas

Ironlynx

magalli,
essa mudança é dinâmica ou os números da Combo B já existirão?Reformulando a minha pergunta:Os números da comboB serão adicionados com o tempo?
Se não for dinámica(na criação de dados com o tempo),crie array de Strings com o conjunto de dados de cada opção correspondente na comboA. dentro do Listener da comboA, vc limpa a comboB a cada seleção(suaComboBoxB.removeAll(); ) e carrega ela com os dados referentes a escolha em A.Repita o processo cada vez que a escolha em A for mudada.Para ficar bonito, vc pode criar um model + ou - como esse:

class InteirosComboModel extends DefaultComboBoxModel {    
   private ArrayList<Integer> inteiros = null;       
   public MyComboModel(ArrayList<Integer> inteiros) {  
      this.inteiros = inteiros;  
   }  
    
   public void addElement(Object obj) {  
      this.inteiros.add((Integer) obj);  
      //avisa ao combobox que o modelo foi alterado.  
      this.fireIntervalAdded(this, 0, 0);  
   }    
   public Object getElementAt(int index) {  
      return this.inteiros.get(index);  
   }    
   public Object getSelectedItem() {  
      return super.getSelectedItem();  
   }    
   public int getSize() {  
      return this.inteiros.size();  
   }  
}

Aí depois em algum lugar vc cria sua lista com esses números tipo:

final ArrayList<Integer> numeros = new ArrayList<Integer>(); //dá um numeros.add("1");
e depois modifica em cada chamada com algo + ou - do tipo:

suaComboBModel.removeAllElements(); suaComboBModel= new MyComboModel(numeros); comboB= new JComboBox(suaComboBModel);
E por aí vai…posso ter esquecido algo, mas é só para te dar uma idéia.Dá para deixar masi bonito criando um método updateCombo passando a lista desejada a cada mudança no comboA.
Se tiver problemas, o java tutorial é seu amigo:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html

magalli

Ironlynx:
magalli,
essa mudança é dinâmica ou os números da Combo B já existirão?Reformulando a minha pergunta:Os números da comboB serão adicionados com o tempo?
Se não for dinámica(na criação de dados com o tempo),crie array de Strings com o conjunto de dados de cada opção correspondente na comboA. dentro do Listener da comboA, vc limpa a comboB a cada seleção(suaComboBoxB.removeAll(); ) e carrega ela com os dados referentes a escolha em A.Repita o processo cada vez que a escolha em A for mudada.Para ficar bonito, vc pode criar um model + ou - como esse:

class InteirosComboModel extends DefaultComboBoxModel {    
   private ArrayList<Integer> inteiros = null;       
   public MyComboModel(ArrayList<Integer> inteiros) {  
      this.inteiros = inteiros;  
   }  
    
   public void addElement(Object obj) {  
      this.inteiros.add((Integer) obj);  
      //avisa ao combobox que o modelo foi alterado.  
      this.fireIntervalAdded(this, 0, 0);  
   }    
   public Object getElementAt(int index) {  
      return this.inteiros.get(index);  
   }    
   public Object getSelectedItem() {  
      return super.getSelectedItem();  
   }    
   public int getSize() {  
      return this.inteiros.size();  
   }  
}

Aí depois em algum lugar vc cria sua lista com esses números tipo:

final ArrayList<Integer> numeros = new ArrayList<Integer>(); //dá um numeros.add("1");
e depois modifica em cada chamada com algo + ou - do tipo:

suaComboBModel.removeAllElements(); suaComboBModel= new MyComboModel(numeros); comboB= new JComboBox(suaComboBModel);
E por aí vai…posso ter esquecido algo, mas é só para te dar uma idéia.Dá para deixar masi bonito criando um método updateCombo passando a lista desejada a cada mudança no comboA.
Se tiver problemas, o java tutorial é seu amigo:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html

Então no frame tem duas combos cmbMarca e cmbModelo, a cmbMarca com nome das marcas Dafra Ducati, Harley-Davidson, Honda, Kasinski, Kawasaki, Sundown, Suzuki, Yamaha
outra combo a cmbModelo vai ser dinamica, exemplo o usuario seleciona na cmbMarca Honda, então na outra combo tem que aparecer para selecionar Pop 100, Lead 110, Nova BIZ 125, CG 125 Fan,
CG 125 Cargo, CG 150 Fan, CG 150 Titan Mix, NXR 150 Bros, CRF 230F, XRE 300…, eu não entendi como eu aplico esse código nessa situação mais já ajuda to começando a pega o jeito rsrs…brigada…

magalli

[color=violet]Ninguém pra me ajudar…???[/color]

J

Possuo um Frame com dois combos (combo1 e combo2).

Ao selecionar no combo1 o item “Teste1”, o combo 2 será populado com “Teste 1 selecionado”, e assim por diante.

combo1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				combo2.removeAllItems();
				
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste1"))
				{
					combo2.addItem("Teste 1 Selecionado");
				}
						
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste2"))
				{
					combo2.addItem("Teste2 Selecionado");
				}
				
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste3"))
				{
					combo2.addItem("Teste3 Selecionado");
				}
			}
		});

Entendi errado ou seria isso que você precisa?

Att.

magalli

joaoiai:
Possuo um Frame com dois combos (combo1 e combo2).

Ao selecionar no combo1 o item “Teste1”, o combo 2 será populado com “Teste 1 selecionado”, e assim por diante.

combo1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				combo2.removeAllItems();
				
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste1"))
				{
					combo2.addItem("Teste 1 Selecionado");
				}
						
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste2"))
				{
					combo2.addItem("Teste2 Selecionado");
				}
				
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste3"))
				{
					combo2.addItem("Teste3 Selecionado");
				}
			}
		});

Entendi errado ou seria isso que você precisa?

Att.

[color=violet]Vô testa e já te falo se deu certo, brigada… [/color]

magalli

joaoiai:
Possuo um Frame com dois combos (combo1 e combo2).

Ao selecionar no combo1 o item “Teste1”, o combo 2 será populado com “Teste 1 selecionado”, e assim por diante.

combo1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				combo2.removeAllItems();
				
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste1"))
				{
					combo2.addItem("Teste 1 Selecionado");
				}
						
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste2"))
				{
					combo2.addItem("Teste2 Selecionado");
				}
				
				if (combo1.getSelectedItem().toString().equalsIgnoreCase("Teste3"))
				{
					combo2.addItem("Teste3 Selecionado");
				}
			}
		});

Entendi errado ou seria isso que você precisa?

Att.

[color=violet]JOãooo deu super certoo brigada…salvo meu dia rsrs…[/color]

Criado 13 de fevereiro de 2013
Ultima resposta 13 de fev. de 2013
Respostas 6
Participantes 3