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