Como inserir valores de um JComboBox para uma JTable?
6 respostas
Jackye
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;privatevoidListarObra(){Sessionsession=HibernateUtil.getSessionFactory().openSession();session.beginTransaction();obras=session.createQuery("FROM Obra").list();if(obras.isEmpty()){JOptionPane.showMessageDialog(null,"Nenhum registro encontrado.");}else{jComboBox2.removeAllItems();for(inti=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.privatevoidPrencherTabelaObra(){jComboBox2.getSelectedItem();jTable1.setModel(newPreencherTabelaObras(ObraDAO.fabricaObraDAO().findAll()));}
Além disso tenho uma classe que lista a tabela (não sei se essa classe é necessária…):
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.
CristianPalmaSola10
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
Jackye
Olá.
Tentei o seguinte:
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]
o que fazer?
:shock:
CristianPalmaSola10
Veja meu exemplo funcionou certinho para mim
Frame:
/* * To change this template, choose Tools | Templates * and open the template in the editor. *//* * TesteCmbBox.java * * Created on 07/02/2012, 08:30:38 */packagetestecombobox;importjava.util.ArrayList;importjavax.swing.JOptionPane;/** * * @author cristian.urbainski */publicclassTesteCmbBoxextendsjavax.swing.JFrame{ModelTablemodelTbl=newModelTable(newArrayList());/** Creates new form TesteCmbBox */publicTesteCmbBox(){initComponents();setVisible(true);setResizable(false);setLocationRelativeTo(this);ComboModelcmbModel=newComboModel(newArrayList());Beanb=newBean(1,"Machado");cmbModel.lista.add(b);b=newBean(2,"Lua");cmbModel.lista.add(b);jComboBox1.setModel(cmbModel);modelTbl.lista.add(newBean(0,"teste"));jTable1.setModel(modelTbl);}/** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code">privatevoidinitComponents(){jComboBox1=newjavax.swing.JComboBox();jScrollPane1=newjavax.swing.JScrollPane();jTable1=newjavax.swing.JTable();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);jComboBox1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){jComboBox1ActionPerformed(evt);}});jComboBox1.addPropertyChangeListener(newjava.beans.PropertyChangeListener(){publicvoidpropertyChange(java.beans.PropertyChangeEventevt){jComboBox1PropertyChange(evt);}});jTable1.setModel(newjavax.swing.table.DefaultTableModel(newObject[][]{{},{},{},{}},newString[]{}));jScrollPane1.setViewportView(jTable1);javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(23,23,23).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jComboBox1,javax.swing.GroupLayout.PREFERRED_SIZE,253,javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,375,javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jComboBox1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,113,javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(173,Short.MAX_VALUE)));pack();}// </editor-fold>privatevoidjComboBox1PropertyChange(java.beans.PropertyChangeEventevt){// TODO add your handling code here:}privatevoidjComboBox1ActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:modelTbl.addLinha((Bean)jComboBox1.getSelectedItem());}/** * @param args the command line arguments */publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newTesteCmbBox().setVisible(true);}});}// Variables declaration - do not modifyprivatejavax.swing.JComboBoxjComboBox1;privatejavax.swing.JScrollPanejScrollPane1;privatejavax.swing.JTablejTable1;// End of variables declaration}
Oi. Não consegui entender exatamente os código dos eventos da sua classe frame.
Utilizo o frame automatico do Swing.
Como adiciono o evento:
private void jComboBox1PropertyChange(java.beans.PropertyChangeEvent evt) {
// TODO add your handling code here:
}
Se utilizar um evento no botão onde ele joga o nome que ta selecionado no ComboBox para a jtable, fica mais fácil?
CristianPalmaSola10
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