Java Panel lässt sich nicht zu JFrame hinzufügen

Creaz

Cadet 2nd Year
Registriert
Mai 2014
Beiträge
29
Main: http://pastebin.com/3vTaPTT7
Window: http://pastebin.com/N5LhiFtv
MainPane: http://pastebin.com/nPwJe3Uj

Ich habe diese drei Klassen in meine Projekt und will eigentlich die Klasse MainPane (erbt von JPanel) dem Window (Die Klasse Window erbt von JFrame) hinzufügen. Dafür habe ich eine Methode setPanel() in der Window Klasse gemacht, die ein JPanel als Parameter bekommt. In der JPanel Klasse (MainPane) rufe ich diese Methode der Klasse Window auf und übergebe ihr this. Warum bekomme ich eine NullPointerException. Ich habe doch ein JPanel erstellt und deklariert.
 
In deinem prameterlosen Window-Konstruktor initialisierst du frame doch gar nicht. Du hast zudem ein grundlegendes Verständnisproblem. Ist dir nicht aufgefallen, dass du in deiner main-Methode bereits Instanzen von Window und MainPane erstellst, diese aber nichts mit den Instanzen zu tun haben, die du in den Konstruktoren der Klassen Window und MainPane erstellst?

Tipp: new Window und new MainPane nur in main aufrufen und die Referenzen an den Konstruktor übergeben. Alternativ die MainPane nur im Konstruktor von Window erstellen.
 
Zuletzt bearbeitet:
Im Parameterlosen Window Konstruktor habe ich aus reiner Verzweiflung ein weiteres Objekt der Klasse MainPane erstellt, aus der Hoffnung, dass es etwas damit zu tun hätte können.

Ich habe das ganze jetzt nochmal aufgefrischt. Und die Methode setPanel aus der Main Klasse aufgerufen. Ist das ganze bis jetzt halbwegs sauber? Ich will Später zwischen verschiedenen Panels, die alle eine eigene Klasse sind switchen. Möglicherweise wäre eine Klasse "PanelSwitcher" noch gut.

Main: http://pastebin.com/7kSEjpEu

Window: http://pastebin.com/tiQAmVd9

MainPane: http://pastebin.com/Pin5VBhz
 
Sieht auf den ersten Blick okay aus. Ich würde die Signatur des Window trotzdem ändern und den setter wegwerfen.
Code:
public Window(JPanel mainPanel) {
    this.mainPanel = mainPanel;
    ...
    // hier kommst du auch an die Größe des mainPanel und brauchst es nicht extra per Parameter reinziehen, wenn es nicht vom Panel abweicht
}
Somit ist dein Window immer in einem konsistenten Zustand. Das macht bei einem so banalen Beispiel keinen Unterschied, ist aber generell bei der Instantiierung sauberer. Du musst dazu natürlich in main zuerst die MainPane erzeugen, dann das Window.

Wenn ich dich richtig verstanden habe, willst du etwas bauen, das es schon gibt und deinen Zweck erfüllen würde. Nennt sich CardLayout.
 
Danke für den Hinweis :)
Hab das ganze auch zum Teil als Übung gemacht, weil ich vor kurzem bei einem Projekt Probleme mit dem Managen der Panels hatte ^^ .
Jedenfalls danke für die Hinweise, ich denke ich komme jetzt ein wenig besser klar. Ich lese mir die Methoden und Möglichkeiten die man mit einem JPanel zur verfügung hat trotzdem noch ein mal genau durch :)
 

Ähnliche Themen

Zurück
Oben