oi
eu tenho 2 combox em uma tela,então gostaria de fazer o seguinte :
eu escolho a disciplina na 1 combo e a partir da disciplina q escolhi eu carrego os modulos na 2 combo
é possivel?
obrigada

Como fazer uma combobox carregar itens em outra combo[resolvido]
15 Respostas
Você está utilizando qual Framework???
Terá que ser com ajax, caso senha Struts tem o DWR
Caso seja JSF 2 Tem o ajax do JSF
Se for JSF 1.2 tem o a4j.
combobox com acesso ao banco.
package Interface.Componente.Componentes;
import Banco.Conexao.Conexao;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
public class MeuCombo extends JComboBox implements FocusListener{
private String sql;
public Statement st;
public ResultSet rs;
public Vector pks = new Vector();
private Vector vetor = new Vector();
public MeuCombo(String sql){
super();
addFocusListener(this);
this.sql = sql;
setMaximumRowCount(10);
preenche();
}
public void preenche(){
try {
//aqui colocar o codigo para preenchimento do combo e do vetor.
Connection con = Conexao.abrirConexao();
try {
st = con.createStatement();
rs = st.executeQuery(sql);
} catch (Exception e) {
}
while (rs.next()) {
addItem(rs.getString(2));
pks.addElement(rs.getInt(1));
pks.get(this.getSelectedIndex());
}
} catch (SQLException ex) {
}
}
public void setValue(int valor){
for (int c = 0; c < pks.size(); c++) {
if ((Integer) pks.get(c) == valor)
this.setSelectedIndex(c);
}
}
public int getValue() {
return (Integer) pks.get(this.getSelectedIndex());
}
public void apaga(){
this.removeAllItems();
pks.removeAllElements();
}
public void focusGained(FocusEvent e) {
apaga();
preenche();
}
public void focusLost(FocusEvent e) {
}
}
este combobox faz acesso ao banco e tras o a pk e o nome (codigo disciplina, nome da disciplina)
vc adiciona um focusListener, ou MouseListener que quando perder o foco ou ser clicado mande uma string sql para outro como semelhante a esse, mas que no metodo construtor dele seja assim:
aonde vc declara seus objetos
MeuCombo comboModulo;
na hora de tratar e passar a string sql que foi recuperada pelos eventos
para o valor da PK
sqlGerada fica assim
Lembrando que nao testei a solução. logica bolada enquanto escrevia o post 
Mr.style : é J2SE
Ahh foi maus…
Nem vi onde era definido isso…
hehe
É o vício da Web.
não ta definido
kkkkk
geralmente eu respondo as perguntas da paty_trind…
já to por dentro do assunto hahahaha
desenvolve usando oq?
EJB, primeface, serverface, jpá, jsf?
gente acho que não me expliquei bem,
ah eu pesquiso as disciplinas no banco para 1 combo o problema ta na ação da minha segunda combo pq por enquanto os modulos da 2 combo q eu pesquiso no banco tb sao carregados mas somente quando eu clico em um botao a ação propriamente da combo não tah fazendo isso…
em relação ao itens que voces disseram para fazer as tabelas do banco de dados eu uso o mysqlfront versão5.0 build 1.0,mas ate hoje eu nao consegui gerar pk e fk com ele ate se voces souberem como fazer isto e puderem me explicar fico grata…
obrigada pela ajuda e espero ter explicado melhor :oops:
kkk
pior que responde mesmo
mas não ajuda a encontrar a solução

hehe
to brincando!!
ajuda sim

ah eu desenvolvo no eclipse? :oops:
kkk
pior que responde mesmo
mas não ajuda a encontrar a solução![]()
hehe
to brincando!!
ajuda sim
ah eu desenvolvo no eclipse? :oops:
ajudar a encontrar a solução eu ajudo, vc que nao consegue implementar 
vc adicionou
public void carregaDisciplinas()
{
try {
conexao = conecta.conectabanco();
comando = conexao.createStatement();
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
}
try{
//System.out.println("select distinct materia from disc_aluno where matricula='"+t0.getText()+"'order by materia");
resultado = comando.executeQuery("select distinct materia from disc_aluno where matricula='"+t0.getText()+"'order by materia");
comboBox.removeAllItems();
//System.out.println("antes d while dentro do metodo");
while(resultado.next())
{
comboBox.addItem(resultado.getObject(1).toString());
//System.out.println(resultado.getObject(1).toString());//
//System.out.println("dentro do while,metodo");
}
comboBox.setSelectedItem(null);
}
catch(Exception e1)
{
JOptionPane.showMessageDialog(null, "Erro ao pesquisar disciplinas deste aluno!");
e1.printStackTrace();
}
}
public void carregaModulo()
{
try {
conexao = conecta.conectabanco();
comando = conexao.createStatement();
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
}
try {
Object h=null,l=null;
if(comboBox.getSelectedItem()!=null )
h=comboBox.getSelectedItem();
//System.out.println(h);
{
//System.out.println("select distinct ensino from disc_modulo where Id_disciplina='"+h+"'");
resultado=comando.executeQuery("select distinct ensino from disc_modulo where Id_disciplina='"+h+"'");
if(resultado.next())
{
l=resultado.getObject(1).toString();
}
// System.out.println("select distinct modulo from disc_aluno where materia='"+h+"'order by modulo");
resultado=comando.executeQuery("select distinct modulo from disc_aluno where materia='"+h+"' order by modulo");
comboBox2.removeAllItems();
while (resultado.next())
{
comboBox2.addItem(resultado.getObject(1).toString());
//System.out.println(resultado.getObject(1).toString()+" dentro do while");
// System.out.println(" dentro do while");
}
comboBox2.setSelectedItem(null);
}
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, "Não há modulos relacionados a esta disciplina!");
e.printStackTrace();
}
}
Eu acho melhor implementar isso num ComboBoxModel, aonde os dados deveria ficar. Voce poderia implementar um ComboBoxModel (começando por estender um AbstractListModel) com um Map que mantêm todas as combinações possíveis. Algo como:
private Map<String, List><String>> todos = new HashMap<String, List><String>>();
Este Map mantém uma lista de módulos para cada disciplina. Você carrega os módulos para cada disciplina e adiciona no Map:
while (rs.next()) {
String disciplina = rs.getString("disciplina");
String modulo = rs.getString("modulo");
List<String> modulos = todos.get(disciplina);
if (modulos == null) {
modulos = new ArrayList<String>();
todos.put(disciplina, modulos);
}
modulos.add(modulo);
}
Seu modelo deve implementar todos os métodos sobre uma lista que seria a lista selecionada a partir do valor da combo pai. E também deve implementar um ActionListener e receber a combo “pai” para ele se atualizar automaticamente:
private Map<String, List><String>> todos = new HashMap<String, List><String>>();
private List<String> valores;
public MeuComboBoxModel(JComboBox comboPai) {
this.comboPai = comboPai;
comboPai.addActionListener(this);
preencheMapa(); // método com o código acima para preencher o Map<String, List><String>>
String disciplina = (String) comboPai.getSelectedValue();
valores = todos.get(disciplina);
}
// Exemplo de implementação do ListModel
public Object getElementAt(int index) {
return valores.get(index);
}
// Implementação do ActionListener
public void actionPerformed(ActionEvent event) {
String disciplina = (String) comboPai.getSelectedValue();
valores = todos.get(disciplina);
}
para fazer isso vc precisa de algum evento
MouseListener, Foculistener
dai vc nao precisa mais do botao
calma ai vou modificar alguns itens na tela e qualquer coisa eu ja posto!!!
muitoo obrigada pela ajuda 
comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (comboBox.getSelectedItem() !=null){
Object h=null;
h=comboBox.getSelectedItem();
try {
resultado=comando.executeQuery("select distinct modulo from disc_aluno where materia='"+h+"' order by modulo");
comboBox2.removeAllItems();
while (resultado.next())
{
comboBox2.addItem(resultado.getObject(1).toString());
System.out.println("item combo modulos: "+comboBox2.getSelectedItem());
}
comboBox2.setSelectedItem(null);
tela.repaint();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
try{
ArrayList<String>disciplinas=new ArrayList<String>();
resultado = comando.executeQuery("select distinct materia from disc_aluno where matricula='"+t0.getText()+"'order by materia");
comboBox.removeAllItems();
while(resultado.next())
{
disciplinas.add(resultado.getObject(1).toString());
}
for(int i=0;i<disciplinas.size();i++)
{
System.out.println("adicionando as disciplinas na combo..."+disciplinas.get(i));
comboBox.addItem(disciplinas.get(i));
}
for(int i=0;i<disciplinas.size();i++)
{
System.out.println("conteudo do vetor de disciplinas..."+disciplinas.get(i));
}
System.out.println("depois do for itens da combo "+comboBox.getSelectedItem());
comboBox.setSelectedItem(null);
tela.repaint();
}
catch(Exception e1)
{
JOptionPane.showMessageDialog(null, "Erro ao pesquisar disciplinas deste aluno!");
e1.printStackTrace();
}
bem parecido a uma list ne?
hahahahha
:shock:
heehheehe
obrigada pela ajuda