Problem mit JPanel und CardLayout

pdikij

Mitglied
Hallo Leute!

Ich möchte in meiner Anwendung CardLayout nutzten habe aber folgendes Problem:

Ich will mehrere JPanel mit hilfe von CardLayout überlagern, bekomme aber folgende Fehlermeldung:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at java.awt.Container.addImpl(Unknown Source)
	at java.awt.Container.add(Unknown Source)
	at fertig.ErfassenFrame.getJPanelDown(ErfassenFrame.java:267)
	at fertig.ErfassenFrame.getJContentPane(ErfassenFrame.java:240)
	at fertig.ErfassenFrame.initialize(ErfassenFrame.java:220)
	at fertig.ErfassenFrame.<init>(ErfassenFrame.java:214)
	at fertig.MainFrame.createFrame(MainFrame.java:151)
	at fertig.MainFrame.actionPerformed(MainFrame.java:127)
	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.AbstractButton.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.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.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)

Könnte mir jemand auf mein Fehler hinweisen und eine mögliche Lösung vorschlagen?
Währe sehr dankbar (ich habe noch nie mit CardLayout gearbeitet und konnte auch mit googeln keine Lösung für mein Problem finden!)!

Hier ist ein Ausschnitt aus meinem Quellcode:

Java:
public class ErfassenFrame extends JInternalFrame {
private JPanel cards;
private JPanel jContentPane = null;
private JScrollPane jScrollPaneTop = null;
private JPanel jPanelDown = null;
private JPanel jPLaptopbestand = null;
private JPanel pNeuLaptopbestand = null;
public ErfassenFrame() {
initialize();
private void initialize() {
this.setContentPane(getJContentPane());
}
private JPanel getJContentPane() {
      if (jContentPane == null) {
         jContentPane = new JPanel();
         jContentPane.setLayout(new GridLayout(2, 0));
         jContentPane.add(getJScrollPaneTop(), getJScrollPaneTop().getName());
         jContentPane.add(getJPanelDown(), getJPanelDown().getName());
         }
         return jContentPane;
}
private JPanel getJPanelDown() {
	if (jPanelDown == null) {
		jPanelDown = new JPanel();
		jPanelDown.setLayout(null);
		jPanelDown.setBackground(new Color(204, 204, 204));
		jPanelDown.add(getJPanel5(), null);
		jPanelDown.add(getJPanel(), null);
		jPanelDown.add(getJPanel1(), null);
		JPanel card1 = new JPanel();
		JPanel card2 = new JPanel();
		card1.add(pNeuLaptopbestand);
		card2.add(jPLaptopbestand);
		cards = new JPanel(new CardLayout());
		cards.setBounds(new Rectangle(270, 9, 735, 236));
		cards.add(card1, "NeuLaptopbestand");
		cards.add(card2, "UpdLaptopbestand");
		jPanelDown.add(cards);
	}
	return jPanelDown;
}


private JPanel getPNeuLaptopbestand() {
	if (pNeuLaptopbestand == null) {
		pNeuLaptopbestand = new JPanel();
		pNeuLaptopbestand.setLayout(null);
		pNeuLaptopbestand.setBounds(new Rectangle(924, 5, 73, 231));
		pNeuLaptopbestand.setBorder(BorderFactory.createTitledBorder(null, "Neue Daten eingeben - Laptopbestand (Neuanlage)", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), new Color(0, 102, 255)));
	}
	return pNeuLaptopbestand;
}

}

Ich freue mich über jede Hilfe...

pdikij
 
Hallo,

ich hab jetzt nicht getestet oder sowas, aber ich würde einfach mal sagen, dass es an diesen Zeilen liegt.
Code:
jPanelDown.add(getJPanel5(), null);
Also alle Zeilen in denen null als zweiter Parameter übergeben wird, lass das doch einfach weg. Warum machst du das überhaupt?


MFG

zEriX
 
Zuletzt bearbeitet:
Also alle Zeilen in denen null als zweiter Parameter übergeben wird, lass das doch einfach weg. Warum machst du das überhaupt?

Programmierung von grafischen Oberflächen ist für mich noch ganz neu. Ich musste mich mit fertigen Beispielen rein arbeiten und deshalb habe ich manche Sachen übernommen... :rolleyes:

aber ich würde einfach mal sagen, dass es an diesen Zeilen liegt.

Ich habe es weggemacht, trotzdem kommt der gleiche Fehler... :confused:
Gruß

pdikij
 
Ich denke mal, es liegt an diesen Zeilen:
Code:
JPanel card1 = new JPanel();
JPanel card2 = new JPanel();
card1.add(pNeuLaptopbestand);
card2.add(jPLaptopbestand);  
...
 cards.add(card1, "NeuLaptopbestand");
cards.add(card2, "UpdLaptopbestand");

pNeuLaptopbestand und UpdLaptopbestand werden wohl noch null sein.
Du solltest wohl eher die getPNeuLaptopbestand() und die andere getter Aufrufen..

*grüssle*
MeinerEiner
 
Ok, dann wird es so sein wie ich vorher schon meinte, dass irgendwas was du addest null ist.

MFG

zEriX
 
Code:
card1.add(pNeuLaptopbestand);
card2.add(jPLaptopbestand);  
...
 cards.add(card1, "NeuLaptopbestand");
cards.add(card2, "UpdLaptopbestand");

pNeuLaptopbestand und UpdLaptopbestand werden wohl noch null sein.
Du solltest wohl eher die getPNeuLaptopbestand() und die andere getter Aufrufen..

Ich habe jetzt diese zeilen so umgebaut:
Code:
alt:
card1.add(pNeuLaptopbestand);
card2.add(jPLaptopbestand);  

neu:
card1.add(getPNeuLaptopbestand);
card2.add(getJPLaptopbestand);
Das Anzeigen von der "MutterPanel" funktioniert jetzt! :) Dankeschön für den Hinweiß! ;-)

Nun weiß ich noch nicht wie ich die Inhalte (JPanels) da anzeigen soll...:confused:
Hab mit folgendem versucht geht aber nicht:

Ich möchte wenn ich auf diesen Button drücke das diese JPanels erst dann sichbar werden...
Java:
shw_jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					CardLayout cl = (CardLayout)(cards.getLayout());
										
					showTableContent();
					String table = new String();
					table = tbls_jComboBox1.getSelectedItem().toString();
					if (getCbUpdate().isSelected() && table.equals("laptopbestand")){
						System.out.println("Wichtig! " +table);
						cl.show(cards,"UpdLaptopbestand");
						} else {
							System.out.println("Ups UPdate");						
					} if (getCbNeuAnlegen().isSelected() && table.equals("laptopbestand")){
						
						cl.show(cards,"NeuLaptopbestand");
					} else {
						System.out.println("Ups Neu");
					}
					
				}
			});
		}
		return shw_jButton1;
	}

System.out.println("Ups UPdate"); // Diese Zeile ist nur zur Testzwecken da...

Könntet ihr mir vielleicht sagen wie ich das organisieren kann?

Schöne Grüße

pdikij
 
Hallo, zEriX, MeinerEiner und Andere!

Ich weiß nicht wie diese show() Funktion am besten organisieren soll...

Könntet Ihr mir da helfen?
Oben habe ich mein Problem beschrieben...

Danke euch!

Gruß
pdikij
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück