Construindo um JComboBox ultilizando dados do Banco de Dados

6 respostas
L

Boa tarde, estou desenvolvendo um sistema em que gerencia tratamentos de uma clinica, CADASTRAR, ATUALIZAR, CONSULTAR e EXCLUIR ja funcionam, gostaria de criar um JComboBox que seleciona a coluna nome da tabela Tratamento do meu Banco como segue meu código:

CONTROLLER QUE SELECIONA A TABELA nome E ARMAZENA EM UMA List (ja tentei especificar minha list desta maneira "List, onde minha Model Tratamento contem a String nome, porem não sei o que acontece que o programa não aceita argumentos em uma List se alguem, descobrir o porque disso me ajudem por favor)")

public List recuperarTratamento(){
		List lista = new List();
		
		try {
		 Connection connection = GerenciadorBanco.getConexaoMySQL();
		 Statement comando;
		 comando = connection.createStatement();
		 String sql = "SELECT nome FROM  tratamento";
		System.out.println(sql);	
		 ResultSet resultado = comando.executeQuery(sql);
		 while(resultado.next()){
			 
			 lista.addItem( resultado.getString("nome"));
			 
		 }
		 

		 return lista;
		 
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			GerenciadorBanco.FecharConexao();
		}
		
		 return lista;
	}

retornando esta lista, ativo meu método que está na minha tela:

public static void atualizarTratamento(){
    	   
    	   List dados = gda.recuperarTratamento();
    	   cbm = new DefaultComboBoxModel(dados);    
       }    
       }

"gda" é a instancia da classe que contem o controller que retorna a lista

No meu construtor da tela chamo este método da seguinte maneira:

atualizarTratamento();
		 tratamento = new JComboBox(cbm);

Como percebem, nao sei como construir um DefaultComboBoxModel estou muito confuso, porem tenho certeza que preciso retornar do meu controller uma lista que seja do tipo List ou de alguma forma um String[], quem puder me ajudar ficarei grato.

6 Respostas

P

Não entendi nada.

Mas vá lá!, desenvolvi isto em algum tempo atrás para poupar tempo com preenchimentos de objetos.

private JComboBox PreencheJComboBox(final JComboBox jC) {
        Vector<Object> conteudo = new Vector<Object>();
        
        try {
            //Cleaing JComboBox
            if (jC.getItemCount() > 0) {
                jC.removeAllItems();
            }

            //Preenche JComboBox
            ResultSet rs = BancoDados.fabricaCosulta(sbSQL, cnnConexao);

            while (rs.next()) {
                JComboBoxItem item = null;
                
                if (rs.getObject(1) instanceof Long) {
                    if (rs.getObject(2) instanceof String) {
                        item = new JComboBoxItem(((Long) rs.getObject(1)).intValue(), (String) rs.getObject(2));
                    } else if (rs.getObject(2) instanceof byte[]) {
                        item = new JComboBoxItem(((Long) rs.getObject(1)).intValue(), new String(((byte[]) rs.getObject(2))));
                    }
                } else if (rs.getObject(1) instanceof Double){
                    if (rs.getObject(2) instanceof String) {
                        item = new JComboBoxItem(((Double) rs.getObject(1)).intValue(), (String) rs.getObject(2));
                    } else if (rs.getObject(2) instanceof byte[]) {
                        item = new JComboBoxItem(((Double) rs.getObject(1)).intValue(), new String(((byte[]) rs.getObject(2))));
                    }
                } else {
                    item = new JComboBoxItem((Integer) rs.getObject(1), (String) rs.getObject(2));
                }

                conteudo.add(item);
            }
            
            //Consolida Preenchimento
            jC.setModel(new DefaultComboBoxModel(conteudo));

        } catch (SQLException ex) {
            Logger.getLogger(PreencheObjeto.class.getName()).log(Level.SEVERE, null, ex);
        }

        return jC;
    }
L

Bom vou tentar explicar de uma maneira mais simples que editei:

inicio pela classe que irá pegar os dados do banco:

public ArrayList<Tratamento> pesquisarTratamento(){
		ArrayList<Tratamento> listatratamento = new ArrayList<Tratamento>();
		
		try {
		 Connection connection = GerenciadorBanco.getConexaoMySQL();
		 Statement comando;
		 comando = connection.createStatement();
		 String sql = "SELECT * FROM  tratamento";
		System.out.println(sql);	
		 ResultSet resultado = comando.executeQuery(sql);
		 while(resultado.next()){
			 Tratamento novotratamento = new Tratamento();
			 novotratamento.nome=resultado.getString("nome");
			 novotratamento.preco=resultado.getInt("preco");
			 novotratamento.observacao=resultado.getString("observacao");
			 novotratamento.id=resultado.getInt("id");
			 
			 listatratamento.add(novotratamento);
		
		 }
		 return listatratamento;
		 
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			GerenciadorBanco.FecharConexao();
		}
		
		 return listatratamento;
	}
Ele irá me reornar a matriz da tabela, mas para exibir no JComboBox, preciso unicamente da coluna "nome", como estou solicitando nesta classe:
public static String[] atualizarTratamento(){ 
    	   ArrayList<Tratamento> dados = gda.pesquisarTratamento();
    	   String[] str = new String[dados.size()];
    	   for (int i = 0; i< dados.size(); i++){
    		   str[i] = dados.get(i).nome;   
    	   }   
    	   
    	   return str;
       }

FINALIZANDO, este método retorna uma String[]

Ainda não funciona alguem sabe se possui outra maneira de se construir um JComboBox???

JComboBox tratamento = new JComboBox(new DefaultComboBoxModel(atualizarTratamento()));
P

Bom dia a todos.

Já ouviu falar em Reflection?

http://www.guj.com.br/articles/10

Isso lhe mostra a alma de qualquer objeto.

É disso que precisa para tornar seu preenchimento dinâmico.

Se for realmente isso, posso lhe ajudar.

L

Isso mesmo, usando este cara como eu poderia garantir que no meu resultset retorna um Array de Tratamentos??

P

Calma ae!

Agora estou atarefado.

Mas se isto mesmo, fique tranquilo que iremos resolver esse parada.

Mais tarde te falo.

P

Podemos retomar o assunto?

Criado 6 de novembro de 2012
Ultima resposta 8 de nov. de 2012
Respostas 6
Participantes 2