Problemas com JFrame ao tentar instanciar outra classe[RESOLVIDO]

olá

ao clicar no submenu Inserir, eu queria que ele puxasse o a classe Inserir, assim irei fazer Inserir/Editar/Excluir etc, mas ele dá um null point exception
segue o codigo:

public class Principal {

	public static void main(String[] args) {
		new Index();
	}
}[/code]




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



public class Index extends JFrame{

	JMenuBar barra;
	JMenu menu1;
	JMenuItem item1;
	
	Inserir insere;
	public Index()
	{
		JFrame frame = new JFrame();
		frame.setSize(500, 250);
		
		
		this.barra = new JMenuBar();
		this.menu1 = new JMenu("Ações");
		this.item1 = new JMenuItem ("Inserir");
		
		barra.add(menu1);
		menu1.add(item1);
		
		frame.setJMenuBar(barra);
		
		
		item1.addActionListener(new ActionListener(){   
            public void actionPerformed(ActionEvent e) {   
            	insere = new Inserir();
           }   
        });  
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

[code]import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Inserir{
private static final long serialVersionUID = 1L;

Pessoa pessoa = new Pessoa();
JButton ok, limpa;
JFrame frame;
ButtonGroup bgroup;
JRadioButton sexoM ,sexoF, sexoI;
JTextField nome, telefone, endereco, idade;
JLabel nomeLabel, telefoneLabel, enderecoLabel, idadeLabel, sexoLabel;

public Inserir(){
	super();
	
	
	Container cont = frame.getContentPane();
	
	
	this.ok = new JButton("OK");
	this.limpa = new JButton("Limpar");
	
	this.sexoM = new JRadioButton("Masculino");
	this.sexoF = new JRadioButton("Feminino");
	this.sexoI = new JRadioButton("Indeciso");

	this.nome = new JTextField(20);
	this.telefone = new JTextField(20);
	this.endereco = new JTextField(20);
	this.idade = new JTextField(5);
	
	this.sexoLabel = new JLabel("Sexo:");
	this.nomeLabel = new JLabel("Nome:");
	this.enderecoLabel = new JLabel("Endereço:");
	this.telefoneLabel = new JLabel("Telefone:");
	this.idadeLabel = new JLabel("Idade:");
	
	
	cont.setLayout(null); 
	
	
	idade.setBounds(120,40,30,20);
	idadeLabel.setBounds(20,40,100,20);
	sexoLabel.setBounds(20, 60, 100, 20);
	sexoM.setBounds(120, 60, 100, 20);
	sexoF.setBounds(220, 60, 100, 20);
	sexoI.setBounds(320, 60, 100, 20);
	nomeLabel.setBounds(20,20,100,20);
	nome.setBounds(120, 20, 180, 20);
	telefoneLabel.setBounds(20,80,100,20);
	telefone.setBounds(120,80,100,20);
	enderecoLabel.setBounds(20,100,100,20);
	endereco.setBounds(120,100,200,20);
	ok.setBounds(90,150,80,25);
	limpa.setBounds(250,150,120,25);	  
	
	this.bgroup = new ButtonGroup();
	bgroup.add(sexoM);
	bgroup.add(sexoF);
	bgroup.add(sexoI);


	cont.add(sexoLabel);
	cont.add(sexoM);
	cont.add(sexoF);
	cont.add(sexoI);
	cont.add(ok);
	cont.add(limpa);
	cont.add(nomeLabel);
	cont.add(nome);
	cont.add(enderecoLabel);
	cont.add(endereco);
	cont.add(telefoneLabel);
	cont.add(telefone);
	cont.add(idade);
	cont.add(idadeLabel);

	ok.addActionListener(new ActionListener(){
		public void actionPerformed (ActionEvent e){
		
			pessoa.setNome(nome.getText());
			pessoa.setEndereco(endereco.getText());
			int idadeNumero = Integer.parseInt(idade.getText());
			pessoa.setIdade(idadeNumero);
					
			if (sexoM.isSelected())
			{
				pessoa.setSexo("Masculino");
			}
			else 
			{
				if (sexoF.isSelected())
					pessoa.setSexo("Feminino");
				else
					pessoa.setSexo("Sexo Indeciso");
			}
			
			int telefoneNumero = Integer.parseInt(telefone.getText());
			pessoa.setTelefone(telefoneNumero);
			
			//System.out.println(pessoa.getNome());
			//System.out.println(pessoa.getIdade());
			//System.out.println(pessoa.getSexo());
			//System.out.println(pessoa.getTelefone());
			//System.out.println(pessoa.getEndereco());
			
		}
	});
	limpa.addActionListener(new ActionListener(){   
        public void actionPerformed(ActionEvent e) {   
            endereco.setText("");
            telefone.setText("");
            nome.setText("");
            idade.setText("");
            bgroup.clearSelection();
            
       }   
    });  
	
	frame.setVisible(true);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}
[/code]

creio que estou fazendo algo errado com relação a Containers e Frames, mas não consigo enchergar o que.
obrigado

Seria bom vc ressaltar em que linha o erro ocorre.

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at Inserir.(Inserir.java:26)
at Index$1.actionPerformed(Index.java:36)

Ola mokuro,

Na linha

Container cont = frame.getContentPane();

O seu objeto frame está nulo. Creio que você deva passar o frame principal como parametro para a classe inserir e no construtor atribuir ao parametro ao seu obejto frame.

Esspero que tenha ajudado.

[]´s

é que eu não queria passar o frame principal nessa classe, pois o programa abre soh com a barra de menus, e ao clicar nas opções da barra de menu (soh Inserir por enquanto) ela “puxar” essa classe já pronta pra dentro do frame já aberto, entende?
não tou conseguindo isso.

Sim mas… quem vc espera que seja o dono daquele content pane?

desculpe, n entendi a pergunta

reformulando as ideias, pra tentar deixar mais claro, tem a classe Index, que eh uma tela vazia, com um jframe, e alguns menus, a intenção, é que ao clicar nos botoes de menu, ele chame outra classe pra preencher o frame vazio, a classe Inserir está no modelo (assim acho eu) para ser usada.

aquele content pane foi soh pra adicionar os objetos todos.
se tiver alguma outra ideia, se o modelo tiver errado, algo asism, comenta plz, não sei onde estou errando.
vlw

Você errando no que o colega disse.

Aquela variável frame está vazia. Estando vazia, não existe um objeto que tenha um ContentPane, por isso, nullpointerexception. Efetivamente, essa linha:

Container cont = frame.getContentPane();

Corresponde à:

Container cont = null.getContentPane();

O colega sugeriu que você fornecesse um JFrame, que vc falou que não quer usar. Então, que frame você gostaria de usar? Alguém tem que ser dono do ContentPane, pois este sempre está associado a uma janela.

Responda a essa pergunta e dê um jeito de preencher a variável com uma instância desse JFrame.

sim, eu entendi
mas se eu dou um new Jframe lá

o programa vai rodar
mas na hora que eu apertar plo Index para abrir o Incluir, ele vai abrir numa nova janela, ao invéz de se encaixar na mesma. entende?se eu faço Inserir extender Index e usar a mesma JFrame
quando eu clico no menu, ao invez de ele colocar na mesma janela
ele abre novas 2 janelas ao mesmo tempo, 1 exatamente como eu queria (soh que queria q nao abrisse, se encaixasse na mesma) e uma outra vazia

segue o codigo

public class Principal {

	public static void main(String[] args) {
		new Index();
	}
}

[code]import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Inserir extends Index{
private static final long serialVersionUID = 1L;

Pessoa pessoa = new Pessoa();
Index index = new Index();
JButton ok, limpa;
Container cont;
ButtonGroup bgroup;
JRadioButton sexoM ,sexoF, sexoI;
JTextField nome, telefone, endereco, idade;
JLabel nomeLabel, telefoneLabel, enderecoLabel, idadeLabel, sexoLabel;

public Inserir(){
	super();
	
	this.cont = frame.getContentPane();
			
	this.ok = new JButton("OK");
	this.limpa = new JButton("Limpar");
	
	this.sexoM = new JRadioButton("Masculino");
	this.sexoF = new JRadioButton("Feminino");
	this.sexoI = new JRadioButton("Indeciso");

	this.nome = new JTextField(20);
	this.telefone = new JTextField(20);
	this.endereco = new JTextField(20);
	this.idade = new JTextField(5);
	
	this.sexoLabel = new JLabel("Sexo:");
	this.nomeLabel = new JLabel("Nome:");
	this.enderecoLabel = new JLabel("Endereço:");
	this.telefoneLabel = new JLabel("Telefone:");
	this.idadeLabel = new JLabel("Idade:");
	
	
	cont.setLayout(null); 
	
	
	idade.setBounds(120,40,30,20);
	idadeLabel.setBounds(20,40,100,20);
	sexoLabel.setBounds(20, 60, 100, 20);
	sexoM.setBounds(120, 60, 100, 20);
	sexoF.setBounds(220, 60, 100, 20);
	sexoI.setBounds(320, 60, 100, 20);
	nomeLabel.setBounds(20,20,100,20);
	nome.setBounds(120, 20, 180, 20);
	telefoneLabel.setBounds(20,80,100,20);
	telefone.setBounds(120,80,100,20);
	enderecoLabel.setBounds(20,100,100,20);
	endereco.setBounds(120,100,200,20);
	ok.setBounds(90,150,80,25);
	limpa.setBounds(250,150,120,25);	  
	
	this.bgroup = new ButtonGroup();
	bgroup.add(sexoM);
	bgroup.add(sexoF);
	bgroup.add(sexoI);


	cont.add(sexoLabel);
	cont.add(sexoM);
	cont.add(sexoF);
	cont.add(sexoI);
	cont.add(ok);
	cont.add(limpa);
	cont.add(nomeLabel);
	cont.add(nome);
	cont.add(enderecoLabel);
	cont.add(endereco);
	cont.add(telefoneLabel);
	cont.add(telefone);
	cont.add(idade);
	cont.add(idadeLabel);

	ok.addActionListener(new ActionListener(){
		public void actionPerformed (ActionEvent e){
		
			pessoa.setNome(nome.getText());
			pessoa.setEndereco(endereco.getText());
			int idadeNumero = Integer.parseInt(idade.getText());
			pessoa.setIdade(idadeNumero);
					
			if (sexoM.isSelected())
			{
				pessoa.setSexo("Masculino");
			}
			else 
			{
				if (sexoF.isSelected())
					pessoa.setSexo("Feminino");
				else
					pessoa.setSexo("Sexo Indeciso");
			}
			
			int telefoneNumero = Integer.parseInt(telefone.getText());
			pessoa.setTelefone(telefoneNumero);
			
			//System.out.println(pessoa.getNome());
			//System.out.println(pessoa.getIdade());
			//System.out.println(pessoa.getSexo());
			//System.out.println(pessoa.getTelefone());
			//System.out.println(pessoa.getEndereco());
			
		}
	});
	limpa.addActionListener(new ActionListener(){   
        public void actionPerformed(ActionEvent e) {   
            endereco.setText("");
            telefone.setText("");
            nome.setText("");
            idade.setText("");
            bgroup.clearSelection();
            
       }   
    });  
	
}

}
[/code]

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

public class Index extends JFrame{

JMenuBar barra;
JFrame frame;
JMenu menu1;
JMenuItem item1;

Inserir insere;
public Index()
{
	this.frame = new JFrame();
	frame.setSize(500, 250);
	
	
	this.barra = new JMenuBar();
	this.menu1 = new JMenu("Ações");
	this.item1 = new JMenuItem ("Inserir");
	
	barra.add(menu1);
	menu1.add(item1);
	
	frame.setJMenuBar(barra);
	
	
	item1.addActionListener(new ActionListener(){   
        public void actionPerformed(ActionEvent e) {   
        	new Inserir();
        	
       }   
    });  
	frame.setVisible(true);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}
[/code]

Mokuro…

Não entendi porque vc esta fazendo um extends em Index… acho que uma boa solução seria que a class Inserir desse um extends em JPanel, assim vc pode fazer um add na JFrame Index passado como parameto o painel inserir…

Exemplo usando JPanel


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Inserir extends JPanel{
	private static final long serialVersionUID = 1L;

	private Pessoa pessoa = new Pessoa();
	private JButton ok, limpa;
	private ButtonGroup bgroup;
	private JRadioButton sexoM ,sexoF, sexoI;
	private JTextField nome, telefone, endereco, idade;
	private JLabel nomeLabel, telefoneLabel, enderecoLabel, idadeLabel, sexoLabel;

	public Inserir(){
		super();

		this.setSize(450,450);
		
		this.ok = new JButton("OK");
		this.limpa = new JButton("Limpar");
		
		this.sexoM = new JRadioButton("Masculino");
		this.sexoF = new JRadioButton("Feminino");
		this.sexoI = new JRadioButton("Indeciso");
	
		this.nome = new JTextField(20);
		this.telefone = new JTextField(20);
		this.endereco = new JTextField(20);
		this.idade = new JTextField(5);
		
		this.sexoLabel = new JLabel("Sexo:");
		this.nomeLabel = new JLabel("Nome:");
		this.enderecoLabel = new JLabel("Endereço:");
		this.telefoneLabel = new JLabel("Telefone:");
		this.idadeLabel = new JLabel("Idade:");
		

		idade.setBounds(120,40,30,20);
		idadeLabel.setBounds(20,40,100,20);
		sexoLabel.setBounds(20, 60, 100, 20);
		sexoM.setBounds(120, 60, 100, 20);
		sexoF.setBounds(220, 60, 100, 20);
		sexoI.setBounds(320, 60, 100, 20);
		nomeLabel.setBounds(20,20,100,20);
		nome.setBounds(120, 20, 180, 20);
		telefoneLabel.setBounds(20,80,100,20);
		telefone.setBounds(120,80,100,20);
		enderecoLabel.setBounds(20,100,100,20);
		endereco.setBounds(120,100,200,20);
		ok.setBounds(90,150,80,25);
		limpa.setBounds(250,150,120,25);	  
		
		this.bgroup = new ButtonGroup();
		bgroup.add(sexoM);
		bgroup.add(sexoF);
		bgroup.add(sexoI);


		this.add(sexoLabel);
		this.add(sexoM);
		this.add(sexoF);
		this.add(sexoI);
		this.add(ok);
		this.add(limpa);
		this.add(nomeLabel);
		this.add(nome);
		this.add(enderecoLabel);
		this.add(endereco);
		this.add(telefoneLabel);
		this.add(telefone);
		this.add(idade);
		this.add(idadeLabel);
	
		ok.addActionListener(new ActionListener(){
			public void actionPerformed (ActionEvent e){
			
				pessoa.setNome(nome.getText());
				pessoa.setEndereco(endereco.getText());
				int idadeNumero = Integer.parseInt(idade.getText());
				pessoa.setIdade(idadeNumero);
						
				if (sexoM.isSelected())
				{
					pessoa.setSexo("Masculino");
				}
				else 
				{
					if (sexoF.isSelected())
						pessoa.setSexo("Feminino");
					else
						pessoa.setSexo("Sexo Indeciso");
				}
				
				int telefoneNumero = Integer.parseInt(telefone.getText());
				pessoa.setTelefone(telefoneNumero);
				
				//System.out.println(pessoa.getNome());
				//System.out.println(pessoa.getIdade());
				//System.out.println(pessoa.getSexo());
				//System.out.println(pessoa.getTelefone());
				//System.out.println(pessoa.getEndereco());
				
			}
		});
		limpa.addActionListener(new ActionListener(){   
            public void actionPerformed(ActionEvent e) {   
                endereco.setText("");
                telefone.setText("");
                nome.setText("");
                idade.setText("");
                bgroup.clearSelection();
            }   
        });  
		
	}
}

Usando o Painel Inserir na JFrame Index

      
       // addicionando o painel inserir
        item1.addActionListener(new ActionListener(){   
            public void actionPerformed(ActionEvent e) {   
            	getContentPane().add(new Inserir());
            	getContentPane().repaint();
           }   
        });  

Aconselho também que vc leia sobre “Class JInternalFrame”

Valew

exatamente isso murilo vlw ae
(y)