Java Container

1

Witam

Posiadam prosty program. Na panelu A klikam przycisk. Usuwane są wszystkie komponenty, panele itp. Dodawany jest panel B. Na panelu B, po wciśnięciu przycisku chcę wrócić do panelu A i mam problem:

Kod przycisku w panelu B i pola:

	  
	Panel1 panel1;
	PanelMain pm;
	Panel1 p1;

  	b2.addActionListener(new ActionListener() {
	            public void actionPerformed(ActionEvent e) {
	            	pm.con.removeAll();
	            	pm.con.add(p1);
	            	pm.con.validate();
	            	p1.step();
	            	repaint();
	            }
	        });

Kod klasy zawierającej Panel1 oraz Container:

public class PanelMain {
	
	public static Container con;
	public FrameM frameM;
	public Panel1 panel1;
	
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                FrameM frameM = new FrameM();
                System.out.println("Starting....");
              }
        });
    }

	public void step() {
		// TODO Auto-generated method stub
		
	}
}
class FrameM extends JFrame{
	FrameM(){
        createGUI();
            }
         Container con = getContentPane();
         Panel1 panel1 = new Panel1();
    private void createGUI() {
    	Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        this.setBounds((dim.width)/4, (dim.height)/6, 600, 800);
        this.setTitle("");
        this.setResizable(false);
        this.setVisible(true);
	panel1.setLayout(null);
//
	b4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        	Notepad np = new Notepad();
        	con.remove(panel1);
        	con.add(np);
        	con.validate();
        	np.step();
        	repaint();
        }
    });
//
//kod  
        con.add(panel1);
		panel1.add(b1);
		panel1.add(b2);
		panel1.add(b4);
		panel1.add(b3);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    //
    class Panel1 extends JPanel {
		public void step() {
			}
	public void paintComponent(Graphics g)
	{
//
	g.drawImage(bg, 0, 0, null);
		//
	}
	}
	  	//static fields
   private JButton b1 = new JButton("");
}

Błąd, który otrzymuje po kliknięciu na przycisk w Panelu B:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at ORG.Notepad$1.actionPerformed(Notepad.java:87)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
0

Hmm. Wszystkie komponenty są w Swing'u

0

Zmieniłem listenera na :

	    	b2.addActionListener(new ActionListener() {
	            public void actionPerformed(ActionEvent e) {
	            	FrameM fm = new FrameM();
	            	fm.con.removeAll();
	            	fm.con.add(p1);
	            	fm.con.validate();
	            	repaint();
	            }
	        });

Jednak po kliknięciu error dalej jest i pojawia się nowe okno (takie samo jak poprzednie), które jest puste. (stare okno zostaje.)

1 użytkowników online, w tym zalogowanych: 0, gości: 1