JComboBox não exibe

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…

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…

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
    }
}

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

Deu certo!

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

[code]/** @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
}

}[/code][code]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

}[/code]
não deveria mostrar a consulta do BD no comoboBox?

tenta assim

[code]

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”)

//

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

}//

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

} [/code]

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)
        ...

[quote=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) ... [/quote]

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???

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

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

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??

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

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

[code]
(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

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

certo?

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…??