Trocar panel do frame no action listener por referencia [RESOLVIDO]

to com o seguinte problema no meu projeto final da aula +X

eu to querendo mudar o content panel do meu frame assim:
classe executavel…

	public static void main(String[] args) {
		Fprincipal fprincipal = new Fprincipal();

classe do frame q estende JFrame

public class Fprincipal extends JFrame {

	private static final long serialVersionUID = 1L;
	private Menubar menu = new Menubar(this);// cria menu e passa a referencia do frame!
	
	
	public Fprincipal() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(800,600);
		menu.configura_a_barra();
		this.setJMenuBar(menu);
		this.setVisible(true);
	}

classe do menu q eu jogo no frame ( estende JMenu )

public class Menubar extends JMenuBar {

	private Fprincipal frame ;

	public Menubar(Fprincipal f){
		this.frame = f;// recebe a referencia do frame
	}
          // n vo coloca todos os itens de menu aqui... soh o q interessa, o q dispara o evento q muda o panel do frame

	private JMenuItem menuItemcadastrarProduto = new JMenuItem("Produto");
                
                // aqui eu crio meu uma instancia da classe eventos q implementa actionlistener e passa aquela referencia do frame
	private Listener eventos = new Listener(this.frame);
                // seta o actionlistener pro item de menu;
	menuItemcadastrarProduto.addActionListener(eventos);

e por fim a classe listener q tem o evento q troca de panel

public class Listener implements ActionListener {

	private Fprincipal frame = null;
	
	public Listener(Fprincipal f) {
		// TODO Auto-generated constructor stub
		frame = f;
	}

	@Override
	public void actionPerformed(ActionEvent e) {

	JMenuItem item = new JMenuItem();
	item = (JMenuItem) e.getSource();

		
		if (item.getText() == "Produto") {
                                                // aqui eu quero trocar o panel da referencia frame q eh o frame q eu criei na classe main
			frame.getContentPane().add(new PCproduto()); // PCproduto eh o panel q eu quero joga no frame
			frame.validate();
		}

teoricamente era pra funcionar, mas ele ele da umonte de erro (Unknown Source) quando atribui o panel

isso é meio crítico… vc teria que remover o outro painel antes, adicionar e dar repaint… ainda assim não sei como o swing aceita essa idéia pq não é viavel

o ideal é vc:

  • ou criar um tabbed painel
  • ou criar os paineis e ao clicar no botão apenas manipular o setVisible deles
  • o mais correto: usar frames ao invés de painéis na criação de novas telas… ta economizando frames pq?

n queria pipocar janelinha uaheuahe n da pra mudar pra visible pq to em uma classe externa, a unica maneira eh passar uma referencia do panel mas dai nao vou saber qual panel eu to setando

mew o problema n tem nada aver com os frames ou panels,
o problema é q eu to passando a referencia this e ele nao ta achando,
eu fiz um teste, criei uma classe, e dessa classe eu criei outra passando a referencia this no construtor
mas se eu tentar acessar qualquer método ou propriedade da classe primeira da NullPointerException*
como se eu n tivesse instanciado. mas é impossivel pq a classe extende Jframe e eu to vendo ela na minha cara, concerteza ela foi instanciada
alguma coisa ta errada quando eu passo a referencia this, pq o eclipse até me da as opçoes quando eu coloco .get, ele mossta os get da classe
mas se eu tenta algum da NullPointerException, eu coloquei um JTextField no frame e tentei pegar o q tinha nele com um botao deu a msm coisa, concerteza o JTextField foi instanciado!
o action listener funciona perfeitamente, mas se eu passar uma referencia pro action listener da classe Jframe e tentar acessar o JTextField pelo evento, da NullPointerException!

nao entendi muito bem do jeito q vc falou… pode me mostrar em código os exemplos de null?

sobre o q vc disse ali em cima, pra saber o painel q vc ta passando como referencia vc pode criar uma classe extendendo JPanel e dar um codigo pra ela… cada painel q vc criar da um codigo diferente que identifique aquele painel entende?

acho q daria pra usar o hashcode dele ou instanceof pra vc achar o painel… mas do jeito q falei agora ae fica bem mais facil…

nossa como eu sou retardado eu esqueci de atribuir a referencia de instancia q o construtor recebe pra variavel
desculpa ae ter perdido o tempo de vcs =X
funciono =D, tudo isso era pra no final adiciona uma linha em uma tabela por uma classe externa, e funciono graças a Deus uaehauhe
brigadao ae =D