Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen

qwerqer

Mitglied
Hallo!

Ich arbeite derzeit an meinem Schulprojekt, in dem ich das Brettspiel die Siedler von Catan implementiere.

Während des Spielverlaufs werden mit Hilfe eines JDialogs diverse Nachrichten angezeigt.
z.B.
-User ist am Zug
-Handel mit der Bank war erfolgreich
-Handel mit der Bank war nicht erfolgreich
-Warte auf Antwort der anderen User (bei einer Handelsanfrage)
-etwaige Fehlermeldungen
-uvm

Es gibt bei der Darstellung von einzelnen Meldungen keine Probleme. Der JDialog lässt sich ohne Probleme darstellen und schließen.

Ich erzeuge mit ein JDialog Objekt und setze es mit setVisible aktiv bzw. inaktiv.

Hier die Initialisierung des JDialogs
Code:
private JDialog dialog;
private JButton dialogOk;
private JPanel dialogMsgPanel;
private JLabel dialogTextLable;
private JPanel dialogOkPanel;

private void openJDialog() {
		dialog = new JDialog(GUIInGame, true);
		dialog.setSize(300,150);
		dialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		dialog.setAlwaysOnTop(true);
		dialog.getContentPane().setLayout(new GridLayout(2, 1));
		dialog.setLocationRelativeTo(null);

		dialogMsgPanel = new JPanel();
		dialogMsgPanel.setLayout(new FlowLayout());
		dialogTextLable = new JLabel();
		dialogMsgPanel.add(dialogTextLable);
		
		dialogOkPanel = new JPanel();
		dialogOkPanel.setLayout(new FlowLayout());
		dialogOk = new JButton("ok");
		dialogOkPanel.add(dialogOk);
		
		dialog.getContentPane().add(dialogMsgPanel);
		dialog.getContentPane().add(dialogOkPanel);
	}

Hier die Methoden, mit denen ich den JDialog einblenden/ändern bzw verstecken kann.
Code:
//für die Darstellung des JDialogs mit Titel, Nachricht und
//ob der OK-Button dargestellt werden soll oder nicht
//dabei wird das Panel mit dem Button auf visible = true/false gesetzt
	public void showNewDialog(String title, String msg, Boolean button) {
		hideJDialog();		
		dialog.setTitle(title);
		dialogTextLable.setText("<html><body>" + msg + "</body></html>");
		changeJDialogButtonState(button);
		showJDialog();
	}

//diese Methode wird vom Controller aufgerufen, wenn der OK Button
//gedrückt wurde
	public void hideJDialog() {
		dialog.setAlwaysOnTop(false);
		dialog.setVisible(false);
	}

//wird aufgerufen, nachdem der Text des JDialogs etc
//geändert wurde
	private void showJDialog() {
		dialog.repaint();
		dialog.setAlwaysOnTop(true);
		dialog.setVisible(true);
	}
	
//ist für das Ändern des visible status des OK-Button Panel
	private void changeJDialogButtonState(Boolean value) {
		dialogOkPanel.setVisible(value);
	}

Das Funktioniert soweit einwandfrei.
Nur habe ich jetzt folgende Situation

Der Client wählt die Ressourcen aus, die er gerne handeln möchte und schickt dies zum Server.
Der Server überprüft, ob ein anderer User die gewünschte Ressource in der gewünschten Menge überhaupt hat. Beim anfragenden Client wird folgender Dialog geöffnet:
Code:
//1. Titel, 2. Nachricht, 3. OK-Button nicht anzeigen
ingame.showNewDialog("Trade waiting", "Waiting for response", false);

attachment.php

(es handelt sich dabei um den Dialog der aussieht wie auf Screenshot Schritt1.jpg; siehe Anhang)

Der OK-Button wird an dieser Stelle nicht angezeigt, da der User nicht weiterspielen soll, während er wartet.

Wenn der Fall eintritt, dass niemand in der Lage ist um zu handeln, erhält der Anfragende-Client die Meldung, dass der Handel vorbei ist.
Der Dialog wird dann geändert werden (Titel, Text und der Button soll angezeigt werden)
Code:
//1. Titel, 2. Nachricht, 3. OK-Button anzeigen
ingame.showNewDialog("Trade ended", "Nobody to trade", true);

Und genau hier, bei dem Übergang von "Waiting for response" zu "Nobody to trade", passiert etwas merkwürdiges. Der JDialog wird nicht kurzfristig geschlossen, der Text + Titel wird nicht geändert und das OK-Button-Panel wird ebenfalls nicht auf visible gesetzt.

Es scheint, als würde diese Abfolge zu schnell passieren und die GUI kommt nicht nach mit zeichnen oder ähnlichem.

Bei dem Fall, dass es aber einen User gibt, der handeln kann und auch mit dem anfragenden Client handelt, funktioniert alles einwandfrei und der Dialog "Wait for response" verschwindet und es erscheint der zweite Dialog (siehe Screenshot)
attachment.php

(Screenshot Schritt2.jpg)

Es handelt sich dabei allerdings um den selben Code.
So ändere ich den Dialog, wenn ein Client den Handel akzeptiert hat:
Code:
ingame.showNewDialog("Trade success", res.getByUser() + " has tradet with you!", true);

Ich habe auch bereits versucht, den JDialog nicht modal anzeigen zu lassen. Das ändert aber leider genau garnichts. Ich kann dann zwar weiterspielen, doch der Dialog bleibt besteht.

Das JDialog-Object immer zu zerstören und ein neues zu erzeugen hat ebenfalls keine Änderung gezeigt.

Kann mir da vielleicht jemand weiterhelfen - wäre wirklich sehr dankbar, da ich einfach nicht mehr weiter weiß.

Vielen Dank!

Gruß
Stefan
 

Michael...

Top Contributor
Das sich die beiden Codezeilen nicht unterscheiden, bau doch in die Methode mal ein oder mehrere System.out.println(...) ein, um zu überprüfen ob diese überhaupt in beiden Fällen aufgerufen und abgearbeitet wird. Evtl. wird ja in einem Fall durch ein blockierendes read... auf den Stream oder etwas anderes der EDT blockiert.
 

qwerqer

Mitglied
Das sich die beiden Codezeilen nicht unterscheiden, bau doch in die Methode mal ein oder mehrere System.out.println(...) ein, um zu überprüfen ob diese überhaupt in beiden Fällen aufgerufen und abgearbeitet wird. Evtl. wird ja in einem Fall durch ein blockierendes read... auf den Stream oder etwas anderes der EDT blockiert.

Hallo!

Ja das habe ich bereits probiert - er kommt dort immer an und führt den Code auch aus.

@discipulo: vielen Dank! Das schau ich mir gleich mal an. :)

Edit: hab mir das mit der Usereingabe jetzt angeschaut. Da wird vom User ja eine Eingabe erwartet. Das ist bei mir nicht der Fall. :(

Gruß
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
D Button auf geöffnetem JDialog AWT, Swing, JavaFX & SWT 5
N Definitionen JDialog AWT, Swing, JavaFX & SWT 7
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
S Jframe aus JDialog starten AWT, Swing, JavaFX & SWT 4
M JDialog übergibt eingaben nicht an aufrufende klasse AWT, Swing, JavaFX & SWT 15
S Assistent im JDialog AWT, Swing, JavaFX & SWT 7
H Swing JDialog cannot be resolved as a typ AWT, Swing, JavaFX & SWT 12
C Swing JDialog "flutet" den Arbeitsspeicher AWT, Swing, JavaFX & SWT 9
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
C Swing JDialog Ladebildschirm wird nicht angezeit AWT, Swing, JavaFX & SWT 5
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
A Swing JDialog KeyBindings und Textfelder AWT, Swing, JavaFX & SWT 5
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
S Schrift ändern in JDialog AWT, Swing, JavaFX & SWT 3
S Problem mit JDialog AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
hdi Swing Genaue Funktionsweise von modalem JDialog? AWT, Swing, JavaFX & SWT 11
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
Ollek JDialog Koponenten neu anordnen AWT, Swing, JavaFX & SWT 3
A JDialog AWT, Swing, JavaFX & SWT 10
Dit_ SwingUtilities.invokeLater und Modaler JDialog AWT, Swing, JavaFX & SWT 11
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A JDialog ausdrucken AWT, Swing, JavaFX & SWT 7
aze JDialog mit runden ecken AWT, Swing, JavaFX & SWT 8
Dit_ JDialog nur horizontal vergrößern AWT, Swing, JavaFX & SWT 3
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
H JDialog, Modal - Klassenübergreifend => Problem AWT, Swing, JavaFX & SWT 5
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
B JDialog AWT, Swing, JavaFX & SWT 6
J Swing Probmel mit JDialog (Modal/FocusLost/Button) AWT, Swing, JavaFX & SWT 5
E Swing Fehlerhaftes Verhalten bei gleichzeitigen Verwendnen von PopUpMenu und JDialog?! AWT, Swing, JavaFX & SWT 5
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
E Daten von JDialog nach JFrame übertragen AWT, Swing, JavaFX & SWT 4
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
BattleMaster246 JDialog erscheint in der Taskbar AWT, Swing, JavaFX & SWT 7
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
X Swing JDialog von JInternalFrames überlappen lassen AWT, Swing, JavaFX & SWT 2
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
A JFrame oder JDialog AWT, Swing, JavaFX & SWT 12
B Swing JDialog : Herausfinden wie dieser beendet wurde? AWT, Swing, JavaFX & SWT 2
T JDialog ohne Fenstermanager? AWT, Swing, JavaFX & SWT 2
S JDialog in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 3
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
K Swing JDialog ohne Titlebar mit Rahmen AWT, Swing, JavaFX & SWT 5
KrokoDiehl Swing KeyEvents für JDialog / JFrame AWT, Swing, JavaFX & SWT 2
C Swing JComboBox in JDialog AWT, Swing, JavaFX & SWT 3
F Frage zu Dialogen mit JDialog -Erstellung des Konstruktors AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben