Ende eines Frames abwarten

vanBraQ

Mitglied
Hi Leute habe ein Problem ...

Ich habe ein kleines Memory Programmiert welches so aussieht:

Ich habe ein JFrame in dem ich 4*4 Rectangles habe. Außerdem habe ich ein weiteres Rectangle welches ich bewegen kann. Wenn ich nun mit diesem beweglichen Rectangle über das "Spielfeld" fahre und auf eines der anderen Bewege kann ich "Enter" drücken und es öffnet sich quasi die Karte. Das bedeutet es wird ein weiteres JFrame erzeugt.
Unter meinen Karten befinden sich Buchstaben, und so ein Buchstabe wird in dem weitern JFrame welches ich erzeugt habe "vorgefahren", das heißt es bewegt sich ein Rectangle so über das JFrame als würde man den Buchstaben schreiben. Das Rectangle bewegt sich solange ich "Space" drücke. Ist der Buchstabe fertig abgefahren, schließt sich das zweite JFrame und ich kann erneut am ersten JFrame weiter arbeiten.

Nun habe ich aber das Problem, dass ich quasi beim Karten öffnen mehr ausführe als nur das simple JFrame zu erzeugen. Hierfür habe ich die Methode openCard():
Java:
public void openCard(int height, int width) {
		String letter = playfield[height][width];
		new PrintField(letter, this);
		setCards(letter);
		sf.setKarte(letter);
		printPlayerCards();
	}
Mit new PrintField(letter, this) erzeuge ich das zweite JFrame, ich will aber, dass setCards usw. erst ausgeführt wird, wenn der Buchstabe fertig "vorgefahren" wurde, und sich das Frame automatisch geschlossen hat.
Meine Idee, ich baue mir eine while-Schleife ein, und frage irgendeinen Boolean ab, ca so:
Java:
public void openCard(int height, int width) {
		String letter = playfield[height][width];
		new PrintField(letter, this);
		while(this.letterFertigGezeichnet == false){
			System.out.println("Ich warte bis er fertig gezeichnet ist");
		}
		setCards(letter);
		sf.setKarte(letter);
		printPlayerCards();
	}

Das Problem hier: Mein JFrame ladet nicht erfolgreich und ich kann dass "Vorfahren" gar nicht starten.

Wie kann ich das Problem lösen ? Oder muss ich meinen kompletten Code umstrukturieren?
 

vanBraQ

Mitglied
naja das Problem ist wohl ein anderes ...

habe als zentrale Steuerklasse die Klasse Game, von dort aus werden die ganzen JFrames aufgerufen und in ihr läuft auch die gesamte Logik ab. Diese Klasse muss quasi gesperrt werden während das bestimmte JFrame gerade ausgeführt wird.
 

Harry Kane

Top Contributor
naja das Problem ist wohl ein anderes ...
habe als zentrale Steuerklasse die Klasse Game, von dort aus werden die ganzen JFrames aufgerufen und in ihr läuft auch die gesamte Logik ab. Diese Klasse muss quasi gesperrt werden während das bestimmte JFrame gerade ausgeführt wird.
Aha. Ich habe leider keine Ahnung, wie man "eine Klasse sperrt", auch nicht "quasi", dafür habe ich den Eindruck, daß einer von uns beiden nicht ganz verstanden hat, wo das eigentliche Problem liegt.
Dann nochmal langsam. Wir reden von einer single threaded Applikation. Du hast eine openCard-Methode, die einen JFrame auf den Bildschirm bringt. Du möchtest, daß die Ausführung der Methode stoppt, solange der JFrame sichtbar ist, und erst dann weiter läuft und die Methode setCards() aufruft, wenn der JFrame verschwunden ist/vernichtet wurde.
Ist das das "Problem"? Wenn ja, musst du wie oben beschrieben den JFrame durch einen modalen JDialog ersetzen.
 

Lodoss

Aktives Mitglied
was Harry Kane als Lösung vorschlägt ist der richtige Ansatz

hier mal als kleines Beispiel wie sowas funktioniert:

Java:
package ModalDialogs;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ModalDialogsDemo extends JFrame
{
	public static void main(String[] args)
	{
		new ModalDialogsDemo();
	}
	
	public ModalDialogsDemo()
	{
		this.setSize(300,100);
		this.getContentPane().setLayout(new BorderLayout());
		
		JButton openModalBtn = new JButton("Zeige ersten Dialog (Modal)");
		openModalBtn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent arg0)
			{
				openDialogFirst();
			}
		});
		this.add(openModalBtn, BorderLayout.NORTH);
		
		JButton openNotModalBtn = new JButton("Zeige zweiten Dialog (nicht Modal)");
		openNotModalBtn.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				openDialogSecond();
			}
		});
		this.add(openNotModalBtn, BorderLayout.SOUTH);
		
		this.setVisible(true);
	}
	
	private void openDialogFirst()
	{
		// wichtig: modale dialoge brauchen immer einen "parent", damit Sie diesen sperren können
		JDialog firstDialog = new JDialog(this, "First Dialog");
		firstDialog.setSize(800,200);
		firstDialog.add(new JLabel("Solange dieser Dialog offen ist, kann im anderen Dialog nichts gemacht werden"));
		// wichtig: modale dialoge müssen vor "setVisible" auf modal gestellt werden
		firstDialog.setModal(true);
		// hinweis: diese zeile lässt dein programm warten, bis der dialog wieder geschlossen wurde
		firstDialog.setVisible(true);
		// ... hier gehts weiter wenn der modale dialog geschlossen wurde
	}
	
	private void openDialogSecond()
	{
		JDialog secondDialog = new JDialog(this, "Second Dialog");
		secondDialog.setSize(800,200);
		secondDialog.add(new JLabel("Dieser Dialog ist nicht Modal, also kann man im Hauptfenster noch dinge tun"));
		secondDialog.setVisible(true);
	}
}
 

vanBraQ

Mitglied
Meine Basis Klasse ist kein JFrame sondern eine normale Klasse kann es sein, dass es dadurch nicht funktioniert?

Wenn ihr wollt kann ich euch auch den Link zum Git-Repo geben, dann könnt ihr es euch ganz ansehen
 

Lodoss

Aktives Mitglied
Meine Basis Klasse ist kein JFrame sondern eine normale Klasse kann es sein, dass es dadurch nicht funktioniert?

Wenn ihr wollt kann ich euch auch den Link zum Git-Repo geben, dann könnt ihr es euch ganz ansehen

kann sein, kann nicht sein, ich frage mal die USB 4.0 Glaskugel... jap
generell hilfreicher hinweis: weniger vermuten, mehr wissen

damit wir dir helfen können brauchen wir mehr infos, ich kann dir durch raten alleine ned helfen
 

Harry Kane

Top Contributor
Was du als Basisklase verwendest, ist zweitrangig.
Der Punkt ist folgender: In deiner openCard-Methode steht die Zeile
Code:
new PrintField(letter, this);
Damit bringst du offenbar einen JFrame auf den Bildschirm. Die Klasse PrintField erweitert also JFrame oder erzeugt in ihrem Kontruktor eine Instanz von JFrame und zeigt diese an.
Was auch immer von beidem der Fall sein mag: Du musst JFrame durch JDialog ersetzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
A Ende eines Dialoges abwarten AWT, Swing, JavaFX & SWT 16
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Kann man erzwingen, dass Java 'zu Ende zeichnet'..? AWT, Swing, JavaFX & SWT 7
B Programmende bei Ende der XSession AWT, Swing, JavaFX & SWT 0
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
M Anzeige updatet sich erst am Ende des Programms AWT, Swing, JavaFX & SWT 3
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
P Swing JTable null values an das Ende verschieben AWT, Swing, JavaFX & SWT 2
S (Applets) JProgressBar wird erst am Ende angezeigt AWT, Swing, JavaFX & SWT 13
C Swing Labeltext am Anfang statt am Ende kürzen AWT, Swing, JavaFX & SWT 6
T DND mit JList Elemente nicht am Ende einfügen AWT, Swing, JavaFX & SWT 3
A Swing JScrollPane ans ende Scrollen AWT, Swing, JavaFX & SWT 9
H JList in JScrollPane -> ScrollBar ans Ende setzen AWT, Swing, JavaFX & SWT 5
S SWT Spinner - Coursor ans Ende AWT, Swing, JavaFX & SWT 19
M JTextPane Ende des Feldes AWT, Swing, JavaFX & SWT 4
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
K Listeners und das Ende einer Componente AWT, Swing, JavaFX & SWT 4
G Shift + Ende auf JTable AWT, Swing, JavaFX & SWT 2
G Icon ans Ende einer JToolbar AWT, Swing, JavaFX & SWT 7
G Am Ende einer Tabellenzeile zu definierter Komponente gehen AWT, Swing, JavaFX & SWT 2
M JTable zum Anfang oder Ende springen AWT, Swing, JavaFX & SWT 9
G Das ende von einem JTextPane abschneiden AWT, Swing, JavaFX & SWT 2
thE_29 JScrollPane Ende rausfinden AWT, Swing, JavaFX & SWT 3
W JFileChooser speicher von Datein mit und ohne ende AWT, Swing, JavaFX & SWT 2
T "..." am Ende der Zelle in JTable AWT, Swing, JavaFX & SWT 2
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben