Olá!
Estou utilizando códigos para cadastrar a partir de uma interface gráfica. estou trabalhando com Hibernate. Gostaria que me ajudassem.
Como faço para pegar os nomes dos autores numa jComboBox? Sendo que já existe autores cadastrados no banco.
Veja o código que usei para cadastrar:
publicLivroPrencherCamposLivro(Livrolivro){livro.setTitulo(jTextField2.getText());livro.setIsbn(Integer.valueOf(jTextField3.getText()));livro.setNuExemplar(Integer.valueOf(jTextField4.getText()));//Estou com dúvidas de como busco os autores no banco, já que uso collection do Hibernate.livro.setAutorCollection(jComboBox1.getAction()));returnlivro;}//Este código deve preencher os campos do exemplar quando o jRadioButton for selecionado.publicvoidCadastrarExemplar(){ExemplarDAO.fabricaExemplarDAO().inserirExemplar(Integer.valueOf(jTextField4.getText()),newExemplar());ExemplarDAO.fabricaExemplarDAO().StatusEmprestimo(Short.MIN_VALUE,newExemplar());}publicvoidcadastrarLivro(){LivroDAO.fabricaLivroDAO().salvar(PrencherCamposLivro(newLivro()));CadastrarExemplar();}publicvoidBuscarAutor(intCodAutor){Autorautor=AutorDAO.frabricaAutorDAO().findById(CodAutor);}
Ainda não testei os códigos porque preciso definir a lista de autores que o livro pode ter. E no botão cadastro apenas chamo o método CadastrarLivro();
Estou muito confusa com os códigos! Alguém pode me ajudar? Alguem tem alguma ideia de como tenho que organizar esses códigos?
Até. ;-)
Olha, eu não uso o hibernate, porém eu costumo popular um JComboBox com dados do banco, utilizando uma classe chamada ComboBoxModel, eu creio eu que servirá pra você mesmo utilizando o hibernate, pois eu implemento esta classe para utilizar uma conexão direta com o banco e pegar os dados via SQL.
Minha aplicação não tá buscando os nomes dos autores no JComboBox! :(
O que eu faço?
Esta é minha classe que implementa o ComboBoxModel:
packageVisao;importjava.sql.Connection;importjava.sql.Driver;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.ArrayList;importjavax.swing.ComboBoxModel;importjavax.swing.event.ListDataListener;publicclassListarAutorComboBoximplementsComboBoxModel{privateArrayList<String>data=null;privateStringselected_item=null;privateintindex;publicListarAutorComboBox(Stringcolumn,Stringsql){try{data=newArrayList<String>();Classdriver=Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Stringbanco="jdbc:sqlserver://localhost:1433;databaseName=dbTestesRegras";DriverManager.registerDriver((Driver)driver.newInstance());Connectionconn=DriverManager.getConnection(banco,"sa","1a2b3c4d");conn.setAutoCommit(true);PreparedStatementstm=conn.prepareStatement(sql);ResultSetrs=stm.executeQuery();data.add("Nome");while(rs.next()){data.add(rs.getString(column));}selected_item=data.get(0);}catch(Exceptione){e.printStackTrace();}}publicintgetSelectedIndex(){returnindex;}publicvoidsetSelectedIndex(intanIndex){this.index=anIndex;}@OverridepublicvoidsetSelectedItem(ObjectanItem){Stringitem=(String)anItem;selected_item=data.get(data.indexOf(item));setSelectedIndex(data.indexOf(item));}@OverridepublicObjectgetSelectedItem(){returnselected_item;}@OverridepublicintgetSize(){returndata.size();}@OverridepublicObjectgetElementAt(intindex){returndata.get(index);}@OverridepublicvoidaddListDataListener(ListDataListenerl){// Método não utilizado. }@OverridepublicvoidremoveListDataListener(ListDataListenerl){// Método não utilizado. }}
No JComboBox da interface eu fiz o seguinte:
jComboBox1=newJComboBox(newListarAutorComboBox("Nome","Select Nome From Autor Order By Nome"));jComboBox1.addItemListener(newItemListener(){@OverridepublicvoiditemStateChanged(ItemEvente){JComboBoxjComboBox=(JComboBox)e.getSource();//Aqui quero inserir numa table, mas nao sei como fazer isso.}});
J
Jackye
Olá gente!
Gostaria que me explicassem o que estes metodos abstratos (são metodos que fazem parte da classe que implenta ComboBoxModel)fazem:
Olha, achei um jeito fácil de chamar os nomes a partir de um ComboBox:
List<Autor> autor;
private void ListarAutor(){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
autor = session.createQuery("FROM Autor").list();
if (autor.isEmpty()){
JOptionPane.showMessageDialog(null, "Nenhum registro encontrado");
} else {
jComboBox1.removeAllItems();
for (int i = 0; i < autor.size(); i++) {
jComboBox1.addItem(autor.get(i).getNome());
}
}
session.close();
}
Depois é só chamar o método lá na parte do initComponets.
R
Rocklee6544
Uma melhoria disso seria o uso de classe parametrizada , também poderia receber uma coleção qualquer e uma facade para consulta ou outro meio qualquer para consulta.
Ou até mesmo objeto critéria para o Hibernate
packagebr.com.websart.teste;importjava.util.ArrayList;importjava.util.Collection;importjavax.swing.ComboBoxModel;importjavax.swing.event.ListDataListener;publicclassNovoJComboBox<E>implementsComboBoxModel{privateArrayList<E>dados=null;privateintindex;privateEselected_item=null;publicNovoJComboBox(Collection<E>lista){dados=newArrayList<E>();for(Edado:lista){dados.add(dado);}}publicintgetSelectedIndex(){returnindex;}publicvoidsetSelectedIndex(intanIndex){this.index=anIndex;}@OverridepublicObjectgetElementAt(intindex){returndados.get(index);}@OverridepublicintgetSize(){returndados.size();}@OverridepublicObjectgetSelectedItem(){returnselected_item;}@OverridepublicvoidsetSelectedItem(ObjectanItem){selected_item=(E)anItem;setSelectedIndex(dados.indexOf(anItem));}@OverridepublicvoidremoveListDataListener(ListDataListenerarg0){// TODO Auto-generated method stub}@OverridepublicvoidaddListDataListener(ListDataListenerarg0){// TODO Auto-generated method stub}}
R
Rocklee6544
Para utilizar seria legal Criar um Decorator
Algo como:
publicClienteDecorator{Clientecli;publicClienteDecorator(Clientecli){if(cli==null)thrownewIllegalArgumentException("Objeto cliente não pode ser nullo");this.cli=cli;}@OverridepublicStringtoString(){returncli.getNome()+" - "+cli.getTelContatoCli();}}