Auf einem JPanel ein JFrame platzieren

Junk4rvin

Mitglied
Hey,

seit ca. einer Woche programmieren ein Kumpel und ich einen Editor und das dazugehörige Spiel.
Ich möchte nun ermöglichen, dass ich Items aufnehmen kann, und diese in ein Array speichert, welches im Inventar ausgegeben wird.

Meine Frage ist eigentlich mit das einfachste, ich möchte über dem Spielfeld eine Fläche haben, die das Inventar darstellt.. Allerdings soll diese mit der gui/mit dem spielfeld verbunden sein, sodass es immernoch ein fenster ist.

Hatte das mit JFrame versucht, allerdings habe ich somit noch ein Fenster..
Eine andere Idee war, es mit einem anderen JPanel zu versuchen, allerdings gehen zwei JPanel's übereinander wohl nicht so wie ich es will..

Und ich hatte was gelesen von JContainer, allerdings dachte ich, vielleciht gibt es was einfacherers? 🙂

Edit:
Also ich habe noch eine weitere Möglichkeit überlegt, welche ein JDialog wäre..
allerdings habe ich dort wieder ein einzelnes Fenster (auch wenn es in der Taskleiste nicht differenziert ist).. gibts nicht einfaches?
 
Zuletzt bearbeitet:
hmm ..
vielleicht erstmal versuchen genau zu beschrieben was man machen will ..

ansonsten mal so ein paar stichworte wonach du googlen könntest

JLayeredPane
JInternalFrame

ansonsten komme ich nicht ganz klar was du eigentlich machen willst
 
Danke, werde ich sofort googlen..

Kurze Schreibform:

Ich habe ein Spielfeld (JPanel), auf dem ich nun genau in der Mitte ein Fenster öffnen lassen möchte, in dem ich Bilder ausgeben kann.
Bedingung: Dieses Fenster sollte ich mit Visible false und true verstecken oder aufrufen können
das Fenster soll kein extra Fenster sein, sondern in der GUI (auf der das JPanel liegt) mit integriert sein.
 
Klingt nach JInternalFrame, wenn man das nicht über das "Hauptfenster" hinausziehen können soll.
Ist das egal, nimm wie schon vorgeschlagen den JDialog
 
Das Problem ist, ich habe das schon ausprobiert..
Und der JDialog geht gar nicht erst in das "Hauptfenster" rein.. xD

Habe bisher eine gui 610/610 mit einer zeichenfläche von 600*600

Wenn ich eine Taste drücke soll das Fenster sichtbar sein und genau mittig erscheinen und nicht bewegbar sein..

Edit:
Naja, mein InternalFrame Fenster wird anscheinend gar nicht erst gezeichnet.
Ich werde das jetzt erst ein Mal mit einem JDialog lösen, was aber noch nicht die endgültige Lösung sein wird.
Wie ichs löse, werde ich noch nachtragen.

Danke!
 
Zuletzt bearbeitet:
das dein JInternalFrame nicht "gezeichnet" wird lässt darauf schließen das du manuell in eine der zeichen-methoden eingegriffen hast ...
da bräuchte man code um dir zu helfen ...

um das problem zu vermeiden würde ich zusätzlich JLayeredPane nutzen um "das spielfeld" auf jeden fall "ganz hinten" zu haben ... die fläche für die JInternalFrame's kannst du dann eine eben höher legen ...
so stellst du sicher das dein JInternalFrame auf jedenfall sichtbar gezeichnet wird
 
Okay, das ist auch eine Überlegung. Hatte das schon irgendwo gelesen, aber dachte, dass das wohl auch nicht bringen wird.. Hab echt viel ausprobiert und war mit der Geduld am Ende..
Ich werde das dann gleich einmal ausprobieren, da das mit dem JDialog keine endgültige Lösung sein kann. 🙂
 
So, habs jetzt einfach anders gelöst.
Ich habe ein zweites JPanel auf dem Fenster gelegt, bietet mir so sogar noch mehr Freiraum.

Ich hatte das zuvor schon ausprobiert, allerdings muss dabei auf dem JFrame, auf dem die JPanels liegen,
die Reihenfolge folgendermaßen angegeben werden:

Java:
add(Fehlermeldung)
add(Oberfläche)
add(Hintergrund)

Die Namen sind frei ausgedacht. Allerdings muss man das JPanel, welches OBEN liegen soll, zuerst hinzufügen und nicht wie ich dachte, wie zum Beispiel bei einem Stapel Papier, zuerst das Papier hinzufügen, welches unten liegt und das Deckblatt zum Schluss..

mfg
 
Vielleicht hilft dir da ja das CardLayout weiter, mit dem du zwischen verschiedenen Panels hin- und herschalten kannst...
 
Wie gesagt, ich habs jetzt so gelöst, dass das JPanel oben drauf liegt.
Da der InputListener nicht auf dem JPanel sondern auf dem JFrame liegt, macht das somit keinen Unterschied.

Ich habe also das erreicht, was ich wollte. 🙂

CardLayout werde ich mir trotzdem noch einmal angucken, man lernt ja nie aus.
Danke,

mfg
 

Zurück
Oben