Problemas com JFrame

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:

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.

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!

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:

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…

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…

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