Combo box em linhas de JTable [Editado!]

5 respostas
guisantogui

Gente é possivel fazer com que as linhas de uma tabela se comportem como uma ComboBox?

Se sim agora vem a pior parte … Como? :?

Vlw a todos que puderem deixar dicas, links e exemplos
:smiley:

5 Respostas

davidtiagoconceicao

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#combobox

guisantogui

Mais alguma dica, eh q meu ingles não é dos melhores!

guisantogui

Galera fiz assim oh, mas não esta funcionando, acho que o problema eh na hora de setar o JComboBox no TableColumn:

Classe pai que deve fazer o modelo do ComboBox

package Classes.Modelos;

import Classes.DAO.BancoDAO;
import Classes.DAO.DAOPai;
import javax.swing.JComboBox;

public class ColunaComboBox extends JComboBox{

    private DAOPai connBD = new BancoDAO();

    public ColunaComboBox(){}

    public DAOPai getConnBD() {
        return connBD;
    }

    public void listar(){
        for(int i = 0; i < this.getItemCount(); i++){
            System.out.println(this.getItemAt(i).toString());
        }
    }
}

classe que extende a classe acima

package Classes.Modelos;

import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ColCombBoxTabCentroCustGrupos extends ColunaComboBox {

    public ColCombBoxTabCentroCustGrupos(){
        super();
        initComboBox();
    }

    public void initComboBox(){
        ResultSet rs = super.getConnBD().getRs();
        Statement stm = (Statement) super.getConnBD().getStm();

        try {
            stm = (Statement) super.getConnBD().getGcbd().getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            rs = stm.executeQuery("SELECT descricao FROM fn_ccusto");

            if(rs.first()){
                do{
                    super.addItem(rs.getObject(1));
                }
                while(rs.next());
            }
        }
        catch (SQLException ex) {
            Logger.getLogger(ColCombBoxTabCentroCustGrupos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void listar(){
        super.listar();
    }
}

Até aqui tudo certo, mas na hora de aparecer na tela não funciona, se puderem me ajudar agradeço!

guisantogui

Eu terei q criar o Combo box na frame que tem a JTable?

guisantogui

Gente pq o codigo a baixo não funciona, ele roda legal, mas na hora de aparecer os comboBox nas colunas não rola!

codigo

package Interface.Financeiro.Tabelas;

import BancoDeDados.GerenciaConexaoBancoComDados;
import Classes.Modelos.ColCombBoxTabCentroCustGrupos;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.CellEditor;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class TabCentroCustGrupos extends javax.swing.JFrame {

    private DefaultTableModel modelo = null;
    private ResultSet rs = null;
    private Statement stm = null;
    private GerenciaConexaoBancoComDados gcbd = new GerenciaConexaoBancoComDados();
    private TableColumn comboBoxTab = new TableColumn(1);
    private ColCombBoxTabCentroCustGrupos colunaComb = new ColCombBoxTabCentroCustGrupos();

    public TabCentroCustGrupos() {
        initComponents();
        initTabela();
    }
     //****************************
    //codigo gerado automaticamente
    //****************************

    private void btnRetornaActionPerformed(java.awt.event.ActionEvent evt) {                                           
        this.dispose();
}                                          

    public void initTabela(){ // Ter um iniTab() para cada jRadioButton
        try {
            stm = (Statement) gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            rs = stm.executeQuery("SELECT fg.grupo, fg.percentual, fn.descricao FROM fn_grupo_ccusto AS fg INNER JOIN fn_ccusto AS fn ON TRUE");
            modelo = (DefaultTableModel) tabCentroCustGrupos.getModel();

            if(rs.first()){
                do{
                    modelo.addRow(new Object[]{rs.getObject(1)});
                    modelo.setValueAt(rs.getObject(2), rs.getRow()-1, 2);
                    colunaComb.addItem(rs.getObject(3));
                }
                while(rs.next());
            }
//            else
//                System.out.println("Não a linhas na tabela");

            rs.first();
            tabCentroCustGrupos.setModel(modelo);
        }
        catch (SQLException ex){
          ex.printStackTrace();
        }

        comboBoxTab.setCellEditor(new DefaultCellEditor(colunaComb));

        modelo.addRow(new Object[]{});
        tabCentroCustGrupos.setModel(modelo);
    }

    public JTable getTabela(){
        return tabCentroCustGrupos;
    }

    // Variables declaration - do not modify                     
    private javax.swing.JTextArea areaCriterio;
    private javax.swing.JButton btnRetorna;
    private javax.swing.JLabel lblClassificacao;
    private javax.swing.JLabel lblClassificacao1;
    private javax.swing.JLabel lblContas;
    private javax.swing.JLabel lblCriterio;
    private javax.swing.JLabel lblDescricao;
    private javax.swing.JLabel lblDistribCentrosCustos;
    private javax.swing.JLabel lblFundo;
    private javax.swing.JLabel lblGrupo;
    private javax.swing.JLabel lblPessoa;
    private javax.swing.JLayeredPane painel;
    private javax.swing.JScrollPane painelTab;
    private javax.swing.JScrollPane painelTxtArea;
    private javax.swing.JTable tabCentroCustGrupos;
    private javax.swing.JTextField txtClassificacao;
    private javax.swing.JTextField txtDescricao;
    private javax.swing.JTextField txtGrupo;
    // End of variables declaration                   
}
Criado 24 de maio de 2010
Ultima resposta 31 de mai. de 2010
Respostas 5
Participantes 2