Glasspane oder alternativen

Status
Nicht offen für weitere Antworten.
T

Titan

Gast
Hi
ich bin dabei ein spiel zu machen was über Frame läuft.
Es wird über die Paint Methode die spiellandschaft gezeichnet.
Jetzt will ich aber beim "Schmied" ein "Buttonfenster" haben ohne die GIF grafiken.
Würde dies gern über das Spielfeld legen und nach z.b. "Wiedersehen" drücken wieder auf das Spielfeld zurück kommt. Halt so eine art "Glasspane" wie ich gelesen habe, nur geht das unter Frame (kein jframe) bzw gibt es alternativen oder sogar noch einfacher?
So vom aufbau her...
Code:
--------
| [  ] |
--------
Thx für Ideen
 

sparrow

Top Contributor
Es gibt 3 Möglichkeiten,

Möglichkeit 1: Du öffnest ein weiteres Fenster (JDialog). Das ist doof.

Möglichkeit 2: Du baust dir eine kleines eigenes Framework das die eine GUI einblenden kann. Du musst dabei so vorgehen, dass du das Graphics-Objekt deines Frames in andere Objekte übergibst. Also, als ungetestetes Beispiel:
Code:
public void pain(Graphics g) {
  // Dein Code mit dem du normalerweise zeichnest
  if (showDialog) {
     dialog.doPaint(g)
  }
}

Wobei Dialog eine Instanz einer Klasse ist die eine selbstdefinerte Methode doPaint(Graphics g) hat in der dann (wie in der paint des Fensters) lustig auf dem Graphics-Objekt rumgemalw wird.
Entsprechend kannst du dann mit dem Flag showDialog in der Hauptklasse den Status setzen. Soll ein Dialog angezeigt werden showDialog auf true setzen, bei "Wiedersehen" einfach wieder auf false switchen.

Möglichkeit 3: GTGE verwenden.
 
T

Titan

Gast
Also so richtig bin ich damit noch nicht zufrieden.

Ich will halt ein "Button und Label etc.." Feld auf ein paint(); Fenster setzen was sich duch werte öffnet und schließt.
Ausserdem, soll man wenn das Feld offen ist, die Keylistener des paint(); fensters nicht mehr funktionieren, sondern nur die Buttons.
 

sparrow

Top Contributor
Ich befürchte dann musst du dich etwas tiefgehender mit Spieleprogrammierung beschäftigen.

Das ganze kannst du über verschiedene Staten erledigen die dein Spiel annehmen kann. Anhand des darin gesetzten Status musst du in der Hauptschleife des Spiels reagieren.
Beispiel: int status
stauts kann (in deinem Fall) folgende Staten haben:
private final static int RUNNING = 0;
private final static int SHOW_DIALOG = 1;

In deiner Hauptschleife muss also solange wie der Status 0 (RUNNING) ist normal abgearbeitet werden. Dann horchen auch die Key- und Mouselistener wie für ein fließendes Spiel vorgesehen.
Ist der Status jedoch SHOW_DIALOG (1) werden die normalen Key-Listener etweder gar nicht abgefragt oder anders ausgewertet. Die Hauptschleife zeichnet dann auch das normale Spielgeschehen, zusätzlich aber auch noch die Dialogbox (mögliche Verzweigung steht in meinem vorherigen Post).
Den Button zeichnest du einfach selber und über den MouseListener des Frames kannst du raus bekommen ob in den Koordinaten-Bereich des Knopf geklickt wurde und entsprechend darauf reagieren.

Ich empfehle aber den Einsatz einer GameEngine.
 

Saxony

Top Contributor
Titan hat gesagt.:
Halt so eine art "Glasspane" wie ich gelesen habe, nur geht das unter Frame (kein jframe) bzw gibt es alternativen oder sogar noch einfacher?

Ähm was benutzt du nun ? Frame oder JFrame werde aus dem Satz nicht richtig schlau.

Für JFrame gibt es schöne Beispiele zur GlassPane in dem Buch

Swing Hacks.

Unter anderem auch wie man eine MessageBox (mit Label und Buttons) über die ContentPane "malt", ohne das diese ein eigenes Fenster ist.
Im Buch ist das Hack #44.

bye Saxony
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben