Como inserir valores de um JComboBox para uma JTable?

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?

Bjos. Desde já agradeço pela ajuda. :smiley:

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

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())); }

E chamei o método no event do Jcombobox:

private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) { PrencherTabelaEmprestimoObra(); }

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:

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
 */

package testecombobox;

import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author cristian.urbainski
 */
public class TesteCmbBox extends javax.swing.JFrame {

    ModelTable modelTbl = new ModelTable(new ArrayList());

    /** Creates new form TesteCmbBox */
    public TesteCmbBox() {
        initComponents();

        setVisible(true);
        setResizable(false);
        setLocationRelativeTo(this);

        ComboModel cmbModel = new ComboModel(new ArrayList());

        Bean b = new Bean(1, "Machado");

        cmbModel.lista.add(b);

        b = new Bean(2, "Lua");
        
        cmbModel.lista.add(b);
        
        jComboBox1.setModel(cmbModel);

        modelTbl.lista.add(new Bean(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")
    // &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt;
    private void initComponents() {

        jComboBox1 = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });
        jComboBox1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                jComboBox1PropertyChange(evt);
            }
        });

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout layout = new javax.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();
    }// &lt;/editor-fold&gt;
    private void jComboBox1PropertyChange(java.beans.PropertyChangeEvent evt) {
        // TODO add your handling code here:
    }

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        modelTbl.addLinha((Bean)jComboBox1.getSelectedItem());
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TesteCmbBox().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration

}

TableModel:

/**
 *
 * @author cristian.urbainski
 */
public class ModelTable extends AbstractTableModel {

    public ArrayList lista;
    public String[] colunas = {"Titulo", "Código"};


    public ModelTable(ArrayList l)
    {
        this.lista = l;
    }

    public void setColumnName(int columnIndex)
    {

    }

    public int getRowCount()
    {
        return lista.size();
    }

    public int getColumnCount()
    {
        return colunas.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex)
    {
        Bean obj = (Bean) lista.get(rowIndex);

        switch(columnIndex)
        {
            case 0:
                return obj.desc;
            case 1:
                return obj.cd;
            default:
                return null;
        }
    }

    public void addLinha(Bean b)
    {
        lista.add(b);
        fireTableRowsInserted(lista.size(), lista.size());
    }

}

ComboBox model:

/**
 *
 * @author cristian.urbainski
 */
public class ComboModel extends AbstractListModel implements ComboBoxModel{

    public ArrayList lista;
    public Object objSelected;
    
    public ComboModel(ArrayList t)
    {
        this.lista = t;
    }

    public int getSize() {
        return lista.size();
    }

    public Object getElementAt(int index) {
        return lista.get(index);
    }

    public void setSelectedItem(Object anItem) {
        this.objSelected = anItem;
    }

    public Object getSelectedItem() {
        return objSelected;
    }

}

E ai ajudou?

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?

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