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:
[code] public Livro PrencherCamposLivro(Livro livro) {
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()));
return livro;
}
//Este código deve preencher os campos do exemplar quando o jRadioButton for selecionado.
public void CadastrarExemplar (){
ExemplarDAO.fabricaExemplarDAO().inserirExemplar(Integer.valueOf(jTextField4.getText()), new Exemplar());
ExemplarDAO.fabricaExemplarDAO().StatusEmprestimo(Short.MIN_VALUE, new Exemplar());
}
public void cadastrarLivro() {
LivroDAO.fabricaLivroDAO().salvar(PrencherCamposLivro(new Livro()));
CadastrarExemplar();
}
public void BuscarAutor (int CodAutor){
Autor autor = AutorDAO.frabricaAutorDAO().findById(CodAutor);
}[/code]
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:
package Visao;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;
public class ListarAutorComboBox implements ComboBoxModel {
private ArrayList<String> data = null;
private String selected_item = null;
private int index;
public ListarAutorComboBox (String column, String sql){
try {
data = new ArrayList<String>();
Class driver = Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String banco = "jdbc:sqlserver://localhost:1433;databaseName=dbTestesRegras";
DriverManager.registerDriver((Driver)driver.newInstance());
Connection conn = DriverManager.getConnection(banco,"sa","1a2b3c4d");
conn.setAutoCommit(true);
PreparedStatement stm = conn.prepareStatement(sql);
ResultSet rs = stm.executeQuery();
data.add("Nome");
while(rs.next()){
data.add(rs.getString(column));
}
selected_item = data.get(0);
}catch(Exception e){
e.printStackTrace();
}
}
public int getSelectedIndex(){
return index;
}
public void setSelectedIndex(int anIndex){
this.index = anIndex;
}
@Override
public void setSelectedItem(Object anItem) {
String item = (String)anItem;
selected_item = data.get(data.indexOf(item));
setSelectedIndex(data.indexOf(item));
}
@Override
public Object getSelectedItem() {
return selected_item;
}
@Override
public int getSize() {
return data.size();
}
@Override
public Object getElementAt(int index) {
return data.get(index);
}
@Override
public void addListDataListener(ListDataListener l) {
// Método não utilizado.
}
@Override
public void removeListDataListener(ListDataListener l) {
// Método não utilizado.
}
}
No JComboBox da interface eu fiz o seguinte:
[code]jComboBox1 = new JComboBox(new ListarAutorComboBox(“Nome”,“Select Nome From Autor Order By Nome”));
jComboBox1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
JComboBox jComboBox= (JComboBox)e.getSource();
//Aqui quero inserir numa table, mas nao sei como fazer isso.
}
});[/code]
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
package br.com.websart.teste;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;
public class NovoJComboBox<E> implements ComboBoxModel{
private ArrayList<E> dados=null;
private int index;
private E selected_item = null;
public NovoJComboBox (Collection<E> lista){
dados=new ArrayList<E>();
for (E dado : lista) {
dados.add(dado);
}
}
public int getSelectedIndex(){
return index;
}
public void setSelectedIndex(int anIndex){
this.index = anIndex;
}
@Override
public Object getElementAt(int index) {
return dados.get(index);
}
@Override
public int getSize() {
return dados.size();
}
@Override
public Object getSelectedItem() {
return selected_item;
}
@Override
public void setSelectedItem(Object anItem) {
selected_item = (E)anItem;
setSelectedIndex(dados.indexOf(anItem));
}
@Override
public void removeListDataListener(ListDataListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void addListDataListener(ListDataListener arg0) {
// TODO Auto-generated method stub
}
}