Olá. Estou criando um sistema para controle de biblioteca.
Estou utilizando Hibernate, NetBeans e SQL Server 2008.
Gostaria que me ajudassem a criar um método que pegue o nome do JComboBox e passa pra a JTable, ou seja,
no JComboBox tem uma lista de nomes de Obras literárias e quando eu selecionar os nomes com um click do mouse eles fossem pra a JTabel.
Tenho o seguinte código:
// Aqui o método para listar as obras.
List<Obra> obras;
private void ListarObra() {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
obras = session.createQuery("FROM Obra").list();
if (obras.isEmpty()) {
JOptionPane.showMessageDialog(null, "Nenhum registro encontrado.");
} else {
jComboBox2.removeAllItems();
for (int i = 0; i < obras.size(); i++) {
jComboBox2.addItem(obras.get(i).getTitulo());
}
}
session.close();
}
//Aqui o método para pegar os nomes e inserir na JTable.
private void PrencherTabelaObra() {
jComboBox2.getSelectedItem();
jTable1.setModel(new PreencherTabelaObras(ObraDAO.fabricaObraDAO().findAll()));
}
Além disso tenho uma classe que lista a tabela (não sei se essa classe é necessária…):
package Visao;
import Dominio.Obra;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class PreencherTabelaObras extends AbstractTableModel {
private List<Obra> obras;
private static final String[] colunas = {"Código","Título"};
public PreencherTabelaObras(List<Obra> obras){
this.obras = obras;
fireTableStructureChanged();
}
@Override
public int getRowCount() {
return obras.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Obra obra = obras.get(rowIndex);
Object dado = null;
switch (columnIndex){
case 0:
dado = obra.getCodObra();
break;
case 1:
dado = obra.getTitulo();
break;
}
return dado;
}
public List<Obra> getObras() {
return obras;
}
public void setObras(List<Obra> obras) {
this.obras = obras;
}
}
O que tem de errado no código e o que eu preciso fazer pra que ele funcione?
Pesquise sobre eventos do java, veja se existe algum evento ligado a selecao de itens, talvez o evento PropertyChanged ajude no seu caso, quando descobrir que evento usar, quando o evento for disparado é so pegar o item selecionado no combo e adicionar a lista de obras que esta na PreencherTableObras.
Há alguns metodos para inserir, alterar e excluir registro que vc implementa na classe que estende da abstractTableModel, não me lembro de cabeça mas pesquise que vc acha o que vc precisa
private void PrencherTabelaEmprestimoObra() {
jComboBox2.getSelectedObjects();
int linha = jTable1.getSelectedRow();
Obra obra = ((PreencherTabelaObras)jTable1.getModel()).getObject(linha);
jTable1.setModel(new PreencherTabelaObras(ObraDAO.fabricaObraDAO().findAll()));
}
Quando executei dei o seguinte erro:
[color=red]Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: Visao.TelaEmprestimo$2 cannot be cast to Visao.PreencherTabelaObras
at Visao.TelaEmprestimo.PrencherTabelaEmprestimoObra(TelaEmprestimo.java:340)
at Visao.TelaEmprestimo.jComboBox2ActionPerformed(TelaEmprestimo.java:240)
at Visao.TelaEmprestimo.access$000(TelaEmprestimo.java:28)
at Visao.TelaEmprestimo$1.actionPerformed(TelaEmprestimo.java:79)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1240)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1311)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:88)
at javax.swing.DefaultComboBoxModel.addElement(DefaultComboBoxModel.java:126)
at javax.swing.JComboBox.addItem(JComboBox.java:696)
at Visao.TelaEmprestimo.ListarObra(TelaEmprestimo.java:331)
at Visao.TelaEmprestimo.(TelaEmprestimo.java:35)
at Visao.TelaEmprestimo$6.run(TelaEmprestimo.java:274)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
[/color]
Tambem utilizo o matisse para fazer as interfaces, para adicionar eventos basta clicar contrario e tera um meno eventos, dentro desse menu tem todos os eventos possiveis de se adicionar dai basta escolher e clicar naquele que voce quer