Problemas com JFrame

6 respostas
C

Olá Pessoal

Estou começando a estudar swing, e fiz a seguinte aplicação: criei uma classe chamada Painel, onde esta sendo criado uma janela com um menu. E estou tentando fazer o seguinte, que ao clicar na opção “insertLivro”, do menu epara ser adicionado campos a esta janela (painel), então criei a classe “cadastraLivro”, que é filha da classe “Painel”, e ela possui o método “addPainelIsercao()”, que adiciona um botão de teste no painel, ams cada vez que executo e clico para adicionar o botão ocorrem os erros listados abaixo, as classes tb estão sendo apresentadas. Será que alguém poderia dar um help, valeu!!!

public class Painel extends JFrame {
        
    private JPanel painelImagem;
    public Container containerPainel;
    
    /** Creates a new instance of Painel */
    public void MontaPainel(){
        
        painelImagem=new JPanel();
        
            
        containerPainel = getContentPane();
        containerPainel.setLayout(null);
        
        getContentPane().setBackground(Color.WHITE);
        setLocation(200,100);
        
        
        JMenuBar menuBar = new JMenuBar();
        
        // Adiciona a barra de menu ao  frame
        setJMenuBar(menuBar);
                
        // Define e adiciona 3 menus drop down na barra de menus
        JMenu CadastroMenu = new JMenu("Opções");
        JMenu ConsultaMenu = new JMenu("Consultas");
        JMenu AjudaMenu = new JMenu("Ajuda");
        menuBar.add(CadastroMenu);
        menuBar.add(ConsultaMenu);
        menuBar.add(AjudaMenu);
        
        // Cria itens simples para o menu Cadastro
        JMenuItem insertLivro = new JMenuItem("Inserir Livros");
        JMenuItem excluirLivro = new JMenuItem("Excluir Livros");
        JMenuItem editLivro = new JMenuItem("Editar Livros");
        
        //Cria itens para o meunu Consulta
        JMenuItem consultNome = new JMenuItem("Consulta por Nome do livro");
        JMenuItem consultCod = new JMenuItem("Consulta por Código do livro");
        JMenuItem consultAutor = new JMenuItem("Consulta por Autor do livro");
        
        //Cria itens para o menu Ajuda
        JMenuItem ajudaSobre = new JMenuItem("Sobre");
        JMenuItem ajudaSair = new JMenuItem("Sair");
        
        //adiciona os itens criados aos menus
        CadastroMenu.add(insertLivro);
        CadastroMenu.add(excluirLivro);
        CadastroMenu.add(editLivro);
        ConsultaMenu.add(consultNome);
        ConsultaMenu.add(consultCod);
        ConsultaMenu.add(consultAutor);
        AjudaMenu.add(ajudaSobre);
        AjudaMenu.add(ajudaSair);
        
        //colocar teclas de atalho nos ítens do menu
        CadastroMenu.setMnemonic(KeyEvent.VK_O);
        ConsultaMenu.setMnemonic(KeyEvent.VK_C);
        AjudaMenu.setMnemonic(KeyEvent.VK_A);
        insertLivro.setMnemonic(KeyEvent.VK_I);
        excluirLivro.setMnemonic(KeyEvent.VK_E);
        editLivro.setMnemonic(KeyEvent.VK_D);
        
        ajudaSobre.addActionListener(
                new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Sobre");
                
            }
        }
        );
        
        insertLivro.addActionListener(
                new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                CadastraLivro c=new CadastraLivro();
                c.addPainelIsercao();
                
            }
        }
        );
               
        
        setResizable(false);
        setSize(500,500);
        setVisible(true);
        setTitle("Sistema Gerenciador de Biblioteca");
        ImageIcon icone = new ImageIcon("ico.gif");
        setIconImage(icone.getImage());
        
        
    }
    
}
public class CadastraLivro extends Painel{
    
    private JPanel painelInsercao;
    private JButton teste;
    
    
    public void addPainelIsercao(){
        
        //CadastraLivro cad = new CadastraLivro();
        teste=new JButton("TESTANDO");
        containerPainel.add(teste);
         
    }
    
}
erros:

init:

deps-jar:

compile-single:

run-single:

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at grafico.CadastraLivro.addPainelIsercao(CadastraLivro.java:34)

at grafico.Painel$2.actionPerformed(Painel.java:108)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.AbstractButton.doClick(AbstractButton.java:302)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1041)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1774)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Valeu Pessoal
:grin:

6 Respostas

P

Olá cintiars, o seu método main está em uma classe diferente destas que vc postou?? Ou o teu aplicativo tem apenas estas duas classes??

Caso tiver o método main em outra classe posta ae para vermos como vc esta chamando estas classes, ok??

Até mais, Phill.

S

Olá,
você tem que colocar o método main para testar seu exemplo:

public static void main(String[] args){
	CadastraLivro cl = new CadastraLivro();
	cl.setVisible(true);
    }

Não esqueça de fazer os imports…

import javax.swing.*;
import java.awt.*;

Veja se consegue e caso haja novas dúvidas, poste novamente.

Abraço!

C

Oi Galera, valeu o inetresse de vcs em me ajudar, mas eu esqueci de colocar o main, aí tá ele:

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.text.JTextComponent;


public class Principal{
        
    public static void main(String[] args) throws IOException {
        
       Painel aplicacao = new Painel();
        
        aplicacao.MontaPainel();
         
        
    }
  
}

É assim que eu executo a minha aplicação!!

Valeu, :grin:

P

Olá cintiars!

Para adcionar um botão na tela pricipal eu tive que fazer algumas alterações no codigo que vc postou.

Primeiro alterei o metodo main:

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.text.JTextComponent;

public class PrincipalClass {
       
    public static void main(String[] args) throws IOException {
       
       Painel aplicacao = new Painel();
       
       aplicacao.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       aplicacao.setVisible(true);         
    } 
}

segundo, a classe CadastraLivro que nao está mais estendendo a class Painel, segue o codigo abaixo:

import javax.swing.JButton;
import javax.swing.JPanel;

public class CadastraLivro {
	
	JButton teste;
	
	public CadastraLivro() {
		
		
	}
	
	public JButton addPainelIsercao() {
	
		teste = new JButton("TESTANDO");
		teste.setBounds(10,10,100,30);
		
		return teste;
    }   
}

Esta classe tem um metodo construtor e um metodo que retorna o button em questao.

Por fim elterei a chamada da classe CadastraLivro quando vc preciona o menu inserirLivros, que ficou assim:

insertLivro.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e) {
        		CadastraLivro c = new CadastraLivro();
        		
        		getContentPane().add(c.addPainelIsercao());//aqui o metodo addPainelIsercao irá nos retornar o button que criamos na outra classe.
        	}
        });

Bom, acredito ser este o exemplo que vc estava tentando fazer.

Caso contrário posta novamente, blz???

Até mais, Phill…

P

Olá cintiars!

Para adcionar um botão na tela pricipal eu tive que fazer algumas alterações no codigo que vc postou.

Primeiro alterei o metodo main:

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.text.JTextComponent;

public class PrincipalClass {
       
    public static void main(String[] args) throws IOException {
       
       Painel aplicacao = new Painel();
       
       aplicacao.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       aplicacao.setVisible(true);         
    } 
}

segundo, a classe CadastraLivro que nao está mais estendendo a class Painel, segue o codigo abaixo:

import javax.swing.JButton;
import javax.swing.JPanel;

public class CadastraLivro {
	
	JButton teste;
	
	public CadastraLivro() {
		
		
	}
	
	public JButton addPainelIsercao() {
	
		teste = new JButton("TESTANDO");
		teste.setBounds(10,10,100,30);
		
		return teste;
    }   
}

Esta classe tem um metodo construtor e um metodo que retorna o button em questao.

Por fim elterei a chamada da classe CadastraLivro quando vc preciona o menu inserirLivros, que ficou assim:

insertLivro.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e) {
        		CadastraLivro c = new CadastraLivro();
        		
        		getContentPane().add(c.addPainelIsercao());/*aqui o metodo addPainelIsercao irá nos retornar o button que criamos na outra classe.*/
        	}
        });

Bom, acredito ser este o exemplo que vc estava tentando fazer.

Caso contrário posta novamente, blz???

Até mais, Phill…

C

Bah valeu Phill, funcionou!!! Só tinha faltado chamar o método MontaPainel na classe principal. Muito Obrigada!!! :grin: :grin:

Criado 15 de agosto de 2007
Ultima resposta 16 de ago. de 2007
Respostas 6
Participantes 3