JComboBox não exibe

13 respostas
P

Gostaria de saber o que esta errado em minha aplicação, quando clico no ítem de menu “Lançamentos” que deveria mostrar um ComboBox com o resultado de uma pesquisa no BD não dá erro, porém, não exibe o menu

// cria item de menu Lmançamentos
        JMenuItem lancamentosItem = new JMenuItem("Lançamentos");
        lancamentosItem.setMnemonic('L'); //configura o mnemônico como L
        fileMenu1.add(lancamentosItem); // adiciona o item Lançamento ao menu Cadastro
        lancamentosItem.addActionListener(
                new ActionListener(){  // classe interna anônima
                    // Insere a pessoa no BD
                    public void actionPerformed(ActionEvent event){
                        Cadastro cadastro = new Cadastro();
                        comboPessoas = new JComboBox();
                        comboPessoas.setName("Pessoas");
                        comboPessoas.setMaximumRowCount(3);                        
                        q.open("select * from pessoa");
                        q.last();
                        do {
                            comboPessoas.addItem(q.fieldbyname("nome"));
                           // System.out.println(q.fieldbyname("nome"));
                        } while (q.prev());                        
                        comboPessoas.setVisible(true);                                                
                    } // fim do método actionPerformed
                } // fim da classe interna anônima
        );

Se alguém puder, gostaria que me ajudassem…

13 Respostas

Requena

legal… vc iniciou o JComboBox dentro de um metodo… e depois?.. abriu algum dialog? ou frame para a exibição do combobox???
ele nao aparece sozinho pedido no meio da tela… tem de ter um pai que o coloque dentro de um panel…

o problema esta na exibição do combobox ou esta no preenchimento dos dados?
se for na exibição falta código… mostra o resto do código que monta o jdialog.
tenta algo do tipo…

JDialog tela = new JDialog(Frame(), true); JPanel panel = new JPanel(); panel.add(comboPessoas); tela.add(panel); tela.setVisible(true);

faz tempo q n mexo com swing… tempo mesmo… anos… mas é algo assim…

P

na verdade eu postei só uma parte… vou postar a classe completa:

/** @pcjardim */

package Main;

import BD.MysqlBD;
import BD.MysqlQuery;
import domain.Cadastro;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JComboBox;
import javax.swing.JLabel;

public class MenuFrame extends JFrame {
    
    BD.MysqlBD banco = new MysqlBD("jdbc:mysql://localhost/contaspessoais?user=root&password=");
    private JComboBox comboPessoas; //caixa de combinação para selecionar as pessoas
    private JLabel labelPessoas; // rótulo para exibir as pessoas
    
    public MenuFrame(final MysqlQuery q){
        super("Controle de Contas Pessoais");
        
        JMenu fileMenu = new JMenu("Cadastro"); // cria o menu Cadastro
        fileMenu.setMnemonic('C'); // configura o mnemônico como C
        JMenu fileMenu1 = new JMenu("Movimentação"); // cria o menu Movimentação
        fileMenu1.setMnemonic('M'); // configura o mnemônico como M

        // cria item de menu Pessoas
        JMenuItem pessoasItem = new JMenuItem("Pessoas");
        pessoasItem.setMnemonic('P'); //configura o mnemônico como P
        fileMenu.add(pessoasItem); // adiciona o item Pessoas ao menu Cadastro
        pessoasItem.addActionListener(
                new ActionListener(){  // classe interna anônima
                    // Insere a pessoa no BD
                    public void actionPerformed(ActionEvent event){
                        Cadastro cadastro = new Cadastro();
                        cadastro.cadPessoa(cadastro.cadFramePessoa());
                        q.execute("insert into pessoa (nome) values ('"+cadastro.getPessoa()+"')");
                    } // fim do método actionPerformed
                } // fim da classe interna anônima
        );

        JMenuItem descItem = new JMenuItem("Descrição"); //cria o item descrição
        descItem.setMnemonic('D'); // configura o mnemônico como D
        fileMenu.add(descItem); // adiciona o item Descrição ao meu Cadstro
        descItem.addActionListener(
                new ActionListener(){ //classe interna anônima
                    // Insere a descrição no BD
                    public void actionPerformed(ActionEvent event){
                        Cadastro cadastro = new Cadastro();                        
                        cadastro.cadDescricao(cadastro.cadFrameDescricao());
                        switch (cadastro.getDescricao()){
                            case 1:
                                q.execute("insert into descricao (tipo, descricao) values ('"+cadastro.getDescricao()+"','Crédito')");
                                break;
                            case 2:
                                q.execute("insert into descricao (tipo, descricao) values ('"+cadastro.getDescricao()+"','Débito')");
                                break;                         
                        }                        
                    } // fim do método actionPerformed
                } // fim da classe interna anônima
        ); // fim da chamada para addAction Listener

        // cria item de menu Lmançamentos
        JMenuItem lancamentosItem = new JMenuItem("Lançamentos");
        lancamentosItem.setMnemonic('L'); //configura o mnemônico como L
        fileMenu1.add(lancamentosItem); // adiciona o item Lançamento ao menu Cadastro
        lancamentosItem.addActionListener(
                new ActionListener(){  // classe interna anônima
                    // Insere a pessoa no BD
                    public void actionPerformed(ActionEvent event){
                        Cadastro cadastro = new Cadastro();
                        comboPessoas = new JComboBox();
                        comboPessoas.setName("Pessoas");
                        comboPessoas.setMaximumRowCount(3);                        
                        q.open("select * from pessoa");
                        q.last();
                        do {
                            comboPessoas.addItem(q.fieldbyname("nome"));
                           // System.out.println(q.fieldbyname("nome"));
                        } while (q.prev());                        
                        comboPessoas.setVisible(true);                                                
                    } // fim do método actionPerformed
                } // fim da classe interna anônima
        );

        JMenuBar bar = new JMenuBar(); // cria a barra de menus
        setJMenuBar(bar); // adiciona uma barra de menus ao aplicativo
        bar.add(fileMenu); // adiciona o menu Cadastro à barra de menus
        bar.add(fileMenu1); // adiciona o menu Cadastro à barra de menus
    }
}
Requena

Legal… o menu ta aparecendo pq vc ta setando ele no JFrame dessa forma

porem o comboBox nao ta setado no JFrame… entao ele nunca vai aparecer… tendeu???
o comboBox tem de estar eum JFrame/JDialog/JPanel e derivados… no seu caso… vc ta instanciando um JComboBox
e ta deixando ele a deriva salvo em uma variavel mas vc nao colocou ele em nada…
tendeu???
tem de ter uma certe hierarquia para exibição no JFrame

Tenta fazer o que eu ti falei cria um JDialog dentro do action passa this,true pra ele e coloca o combobox dentro desse dialog
igualzinho eu falei em cima…

resumindo
sua hierarquia ta assim

-> JFrame -> JMenuBar ->JMenuItem’s

-> JComboBox

o combobox nao ta em lugar nenhum entao o setVisible dele nao ta fazendo diferença tenta por tipo

-> JFrame -> JMenuBar -> JMenuItem’s
-------------> JPanel -> JComboBox

ai sim vai aparecer

P

Deu certo!

P
Estou tentando agora usar os componentes prontos p/ fazer um formulário, dessa forma:
/** @pcjardim */

package Main;

import BD.MysqlBD;
import BD.MysqlQuery;
import domain.Cadastro;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MenuFrame extends JFrame {

    BD.MysqlBD banco = new MysqlBD("jdbc:mysql://localhost/contaspessoais?user=root&password=");
    private JComboBox comboPessoas; //caixa de combinação para selecionar as pessoas
    private JLabel labelPessoas; // rótulo para exibir as pessoas
    JFrame menuFrame1 = new JFrame("Pessoas");
    private JDialog tela = new JDialog();
    private JPanel panel = new JPanel();
    private JButton button = new JButton("OK");

    public MenuFrame(final MysqlQuery q){
        super("Controle de Contas Pessoais");

        JMenu fileMenu = new JMenu("Cadastro"); // cria o menu Cadastro
        fileMenu.setMnemonic('C'); // configura o mnemônico como C
        JMenu fileMenu1 = new JMenu("Movimentação"); // cria o menu Movimentação
        fileMenu1.setMnemonic('M'); // configura o mnemônico como M

        // cria item de menu Pessoas
        JMenuItem pessoasItem = new JMenuItem("Pessoas");
        pessoasItem.setMnemonic('P'); //configura o mnemônico como P
        fileMenu.add(pessoasItem); // adiciona o item Pessoas ao menu Cadastro
        pessoasItem.addActionListener(
                new ActionListener(){  // classe interna anônima
                    // Insere a pessoa no BD
                    public void actionPerformed(ActionEvent event){
                        Cadastro cadastro = new Cadastro();
                        cadastro.cadPessoa(cadastro.cadFramePessoa());
                        q.execute("insert into pessoa (nome) values ('"+cadastro.getPessoa()+"')");
                    } // fim do método actionPerformed
                } // fim da classe interna anônima
        );

        JMenuItem descItem = new JMenuItem("Descrição"); //cria o item descrição
        descItem.setMnemonic('D'); // configura o mnemônico como D
        fileMenu.add(descItem); // adiciona o item Descrição ao meu Cadstro
        descItem.addActionListener(
                new ActionListener(){ //classe interna anônima
                    // Insere a descrição no BD
                    public void actionPerformed(ActionEvent event){
                        Cadastro cadastro = new Cadastro();
                        cadastro.cadDescricao(cadastro.cadFrameDescricao());
                        switch (cadastro.getDescricao()){
                            case 1:
                                q.execute("insert into descricao (tipo, descricao) values ('"+cadastro.getDescricao()+"','Crédito')");
                                break;
                            case 2:
                                q.execute("insert into descricao (tipo, descricao) values ('"+cadastro.getDescricao()+"','Débito')");
                                break;
                        }
                    } // fim do método actionPerformed
                } // fim da classe interna anônima
        ); // fim da chamada para addAction Listener

        // cria item de menu Lmançamentos
        JMenuItem lancamentosItem = new JMenuItem("Lançamentos");
        lancamentosItem.setMnemonic('L'); //configura o mnemônico como L
        fileMenu1.add(lancamentosItem); // adiciona o item Lançamento ao menu Cadastro
        lancamentosItem.addActionListener(
                new ActionListener(){  // classe interna anônima
                    // Insere a pessoa no BD
                    public void actionPerformed(ActionEvent event){
                        Formulario formulario = new Formulario();
                        formulario.setVisible(true);
                    }
                }                        
        );

        JMenuBar bar = new JMenuBar(); // cria a barra de menus
        setJMenuBar(bar); // adiciona uma barra de menus ao aplicativo
        bar.add(fileMenu); // adiciona o menu Cadastro à barra de menus
        bar.add(fileMenu1); // adiciona o menu Cadastro à barra de menus
    }
}
package Main;

import BD.MysqlBD;
import BD.MysqlQuery;
import javax.swing.DefaultListModel;

public class Formulario extends javax.swing.JFrame {
    private final DefaultListModel listModel;
    /** Creates new form Formulario */
    public Formulario() {
        super ("Lançamentos");
        initComponents();
        listModel = new DefaultListModel();
    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jComboBox1 = new javax.swing.JComboBox();
        jMenuBar1 = new javax.swing.JMenuBar();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Selecione a Pessoa:");

        jComboBox1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox1ActionPerformed(evt);
            }
        });
        setJMenuBar(jMenuBar1);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1)
                .add(27, 27, 27)
                .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(240, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabel1)
                    .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(267, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
        BD.MysqlBD banco = new MysqlBD("jdbc:mysql://localhost/contaspessoais?user=root&password=");
        MysqlQuery q = new MysqlQuery(banco.conn);
        q.open("select * from pessoa");
        q.last();
        do {
            jComboBox1.addItem(q.fieldbyname("nome"));
        } while (q.prev());        
        listModel.addElement(q);
    }
     
    // Variables declaration - do not modify
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenuBar jMenuBar1;
    // End of variables declaration
}
não deveria mostrar a consulta do BD no comoboBox?
Requena
tenta assim
# public  class Formulario extends javax.swing.JFrame {  
#     private final DefaultListModel listModel;  
#     /** Creates new form Formulario */  
#     public Formulario() {  
#         super ("Lançamentos");  
#         initComponents();  
#         preencheComboBox()
#         listModel = new DefaultListModel();  
#     }  
#       
#     @SuppressWarnings("unchecked")  
#     // <editor-fold defaultstate="collapsed" desc="Generated Code">  
#     private void initComponents() {  
#   
#         jLabel1 = new javax.swing.JLabel();  
#         jComboBox1 = new javax.swing.JComboBox();  
#         jMenuBar1 = new javax.swing.JMenuBar();  
#   
#         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);  
#   
#         jLabel1.setText("Selecione a Pessoa:");  
#   
#         setJMenuBar(jMenuBar1);  
#   
#         org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());  
#         getContentPane().setLayout(layout);  
#         layout.setHorizontalGroup(  
#             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)  
#             .add(layout.createSequentialGroup()  
#                 .addContainerGap()  
#                 .add(jLabel1)  
#                 .add(27, 27, 27)  
#                 .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)  
#                 .addContainerGap(240, Short.MAX_VALUE))  
#         );  
#         layout.setVerticalGroup(  
#             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)  
#             .add(layout.createSequentialGroup()  
#                 .addContainerGap()  
#                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)  
#                     .add(jLabel1)  
#                     .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))  
#                 .addContainerGap(267, Short.MAX_VALUE))  
#         );  
#   
#         pack();  
#     }// </editor-fold>  
#   
#     private void preencheComboBox() {  
#         BD.MysqlBD banco = new MysqlBD("jdbc:mysql://localhost/contaspessoais?user=root&password=");  
#         MysqlQuery q = new MysqlQuery(banco.conn);  
#         q.open("select * from pessoa");  
#         q.last();  
#         do {  
#             jComboBox1.addItem(q.fieldbyname("nome"));  
#         } while (q.prev());          
#         listModel.addElement(q);  
#     }  
#        
#     // Variables declaration - do not modify  
#     private javax.swing.JComboBox jComboBox1;  
#     private javax.swing.JLabel jLabel1;  
#     private javax.swing.JMenuBar jMenuBar1;  
#     // End of variables declaration  
# }
P

ta dando esse erro:

A conexão foi um sucesso!
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at BD.MysqlQuery.<init>(MysqlQuery.java:23)
        at Main.Formulario.preencheComboBox(Formulario.java:65)
        at Main.Formulario.<init>(Formulario.java:13)
        at Main.MenuFrame$3.actionPerformed(MenuFrame.java:82)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        ...
Requena

pcjardim:
ta dando esse erro:

A conexão foi um sucesso! Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at BD.MysqlQuery.<init>(MysqlQuery.java:23) at Main.Formulario.preencheComboBox(Formulario.java:65) at Main.Formulario.<init>(Formulario.java:13) at Main.MenuFrame$3.actionPerformed(MenuFrame.java:82) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) ...

Velho… ti ensinar uma coisa
NullPointer é sempre NullPointer… por exemplo

se tenho os metodo a seguir

private String getMessage(Integer i){
  if(i == 0)
    return null
  else
    return "shit";
}

public void methodTest(){
  int i = 0;
  while(i<10)
    System.out.println(getMessage(i++).toUpperCase());
}

seguinte te explidar… ta vendo o getMessage? na primeira rodada ele ta indo um inteiro 0 logo o getMessage vai retornar null…

e nulll NAO É UMA CLASSE COM METODOS!!!

entao quando eu do o .toUpperCase() em null fica assim

null.toUpperCase();

e adivinha null NAO TEM METODOS NENHUM…

entao isso é um nullpointer… é quando vc tenta xamar um metodo de um null…

e adivinha… na sua classe MysqlQuery na linha 23

ta acontecendo isso entendeu???

P

Meu amigo… desculpe minha ignorânica!
Entendi, mas ele não retornaria “null” se não conseguisse conectar?

Scoobydoo

Como Null não tem método nenhum… em vez de retornar “Null” ele retorna o Erro

P

eu entendi que ele ta dando erro pq esta apontando p/ uma variável null…
a minha dúvida é o seguinte: ele esta iniciando a variável banco com “jdbc:mysql://localhost/contaspessoais?user=root&password=”, porém a variável q (MysqlQuery q = new MysqlQuery(banco.conn);) está null, ou seja, não esta iniciando com as informações “banco.conn”, mas em outra classe, outros métodos esta funcionando corretamente, o que estou fazendo de errado aqui??

Requena

tipo....
esses erros são chamados de exceptions... e para serem lançados precisam de um comando do tipo

throws new NullPointerException();

no seu caso provavelmente ta assim

(MysqlQuery q = new MysqlQuery(banco.conn);
  q.commit();

ou coisa assim.... só que tipo vamos dizer a a classe MysqlQuery ao ser iniciada com a conexao ta retornando null ai acontece a cagada

(MysqlQuery q = new MysqlQuery(banco.conn); //Nao existe throw, o construtor apenas retorna null quando a conexao nao pode ser efetuada
  q.commit(); //Ops.... o cara de cima retornou null entao isso aqui vai gerar um throws new NullPointerExcepetion();
[code/]

tendeu?

esse tipo de validação vc q tem de fazer no seu codigo... algo do tipo

[code] (MysqlQuery q = new MysqlQuery(banco.conn);
 if(q == null){
   System.out.println("Falha ao conectar no banco")
   return;
  }
  q.commit();

certo?

P

o método que conecta esta assim:public MysqlQuery(Connection Db){ try{ Database = Db; stm = Database.createStatement(); status = false; } catch(SQLException e){ e.printStackTrace(); System.out.println("Erro ao criar Query!"); } }
onde no meu entender esta retornando “null”, não estaria tratando o erro??
ou estou totalmente equivocado…??

Criado 23 de fevereiro de 2010
Ultima resposta 1 de mar. de 2010
Respostas 13
Participantes 3