Ende eines Dialoges abwarten

Andi_CH

Top Contributor
Mir scheinen die richtigen Begriffe für google zu fehlen...
ConfigPanel enthält einen PanelBuilder.

Ich möchte, dass der aufrufende Thread blockiert wird und "done" erst nach dem Verlassen des Config-Dialoges ausgegeben wird.

Wie mache ich das?

Meine Startroutine (na ja, recht banal :) )

Java:
private void showConfig() {
	frame = new JFrame();
	ConfigPanel cp = new ConfigPanel(mCfg);
	frame.add(cp.getPanel());
	frame.setLocation(100, 100);
	frame.setSize(300, 200);
	frame.pack();
	frame.setVisible(true);
	System.out.println("done");
}
 
Zuletzt bearbeitet:

DanZ

Bekanntes Mitglied
Wo wird denn da überhaupt "done" ausgegeben? :p

Wenn du das ganze im EDT machst passiert das automatisch. Wenn nicht könntest du in den EDT wechseln und im aufrufenden Thread mit wait/interrupt arbeiten.
 

Andi_CH

Top Contributor
Wo wird denn da überhaupt "done" ausgegeben? :p

Wird es doch :D

Ich habe den Code zusammengestrippt und eine Zeile zuviel gelöscht ;-)
Natürlich gebe ich dort nicht "done" aus, sondern werte die neuen Einstellungen aus.

Eike: Sourcen Reeingineeren? Ist das state of the art? Anyway ich schau mal rein.

Das Beispiel verhält sich noch dümmer - wenn eines der Fenster geschlossen wird, terminiert die Applikation

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

@SuppressWarnings("serial")
public class MenuExp extends JFrame {
	
	private static int x = 100;
	private static int y = 100;
	
	public MenuExp() {
		setTitle("Menu Example");
		setSize(150, 150);
		setLocation(x, y);
		x += 50;
		y += 50;
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		JMenu fileMenu = new JMenu("File");
		menuBar.add(fileMenu);
		JMenuItem newAction = new JMenuItem("New");
		fileMenu.add(newAction);
		newAction.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.out.println("You have clicked on the new action");
				MenuExp me = new MenuExp();
				me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				me.setVisible(true);
				System.out.println("done");
			}
		});
	}
	public static void main(String[] args) {
		MenuExp me = new MenuExp();
		me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		me.setVisible(true);
	}
}
 
G

Gast2

Gast
Nein, das stimmt so nicht DanZ. Wenn du nen JDialog verwendest und dort setVisible(true); aufrufst läuft dein Programm trotzdem weiter.
 

DanZ

Bekanntes Mitglied
Nein, das stimmt so nicht DanZ. Wenn du nen JDialog verwendest und dort setVisible(true); aufrufst läuft dein Programm trotzdem weiter.

Sicher? Also zumindest bei Dialog sagt mir die JavaDoc

Code:
 If the dialog is not already
     * visible, this call will not return until the dialog is
     * hidden...

Und JOptionPane benutzt auch nichts anderes... Und da im JDialog nichts dazu steht war ich davon ausgegangen, dass das da genauso ist.
 
G

Gast2

Gast
Oh Tatsache, du hast Recht. Ich war der Meinung dass JOptionPane da noch etwas mehr Magie reinsteckt.
Dann is das ja recht easy :)
 

bERt0r

Top Contributor
JDialog
Java:
public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
			{
				public void run()
				{
					try
					{
						JFrame frame = new JFrame();
						frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						frame.setBounds(100, 100, 450, 300);
						frame.setVisible(true);
						JDialog modalerDialog=new JDialog(frame,true);
						modalerDialog.setBounds(200,200,100,100);
						modalerDialog.setVisible(true);
						System.out.println("Done");
					} catch (Exception e)
					{
						e.printStackTrace();
					}
				}
			});
	}
 

Andi_CH

Top Contributor
modal - ich hab den Nebeneffekt nicht erwartet, aber es ist die Lösung.
Wenn der Dialog nicht modal ist, läuft der Aufrufende weiter (muss er eigentlich auch)
Danke euch allen
 

tfa

Top Contributor
[TIPP]Modal sollte ein Dialog aber nur sein, wenn es unbedingt nötig ist. Nicht, weil das bequemer zu programmieren ist.[/TIPP]
 

DanZ

Bekanntes Mitglied
[TIPP]Modal sollte ein Dialog aber nur sein, wenn es unbedingt nötig ist. Nicht, weil das bequemer zu programmieren ist.[/TIPP]

Wo du das grad ansprichst, was ist nach deiner Meinung denn "unbedingt nötig"? Die "Thread schlafen lassen" Funktionalität selber zu schreiben dürfte ja problematischer sein...
 

tfa

Top Contributor
Wo du das grad ansprichst, was ist nach deiner Meinung denn "unbedingt nötig"?
Wenn die Aufmerksamkeit des Anwenders auf den Dialog konzentriert werden muss und sich ein "normales" Weiterarbeiten verbietet. (Mode (computer interface) - Wikipedia, the free encyclopedia)

Ist es z.B. ein Config-Dialog, wo jetzt wichtige Einstellungen vorgenommen werden müssen -> dann modal.
Oder werden nur Config-Daten für irgend ein x-beliebiges Item angezeigt. Vielleicht möchte man mehr Dialoge gleichzeitig öffnen, um die Configdaten verschiedener Items zu vergleichen -> dann nicht modal.

Die "Thread schlafen lassen" Funktionalität selber zu schreiben dürfte ja problematischer sein...
Dann will man natürlich auch diese "Funktionalität" nicht haben.
 

Andi_CH

Top Contributor
Ist es z.B. ein Config-Dialog, wo jetzt wichtige Einstellungen vorgenommen werden müssen -> dann modal.
Oder werden nur Config-Daten für irgend ein x-beliebiges Item angezeigt. Vielleicht möchte man mehr Dialoge gleichzeitig öffnen, um die Configdaten verschiedener Items zu vergleichen -> dann nicht modal.

Wie der Name vermuten lässt, werden Konfigurationsdaten eingegeben und im konkreten Fall sind es die für DAS Programm, nicht für ein Item - bis die Eingaben fertig sind und übernommen werden könnte theoretisch weitergearbeitet werden, aber bis jetzt arbeite ich mit den Originaldaten. (Ich könnte auch eine Kopie machen - kein Problem)

Ich als User mag modale Dialoge auch nicht besonders, aber in diesem Fall ist es wohl angebracht.

Was gibt es für Alternativen?

Unabhägig laufender Dialog.
Ende melden per Listener?
Im laufenden Hauptprgramm die Konfiguration austauschen? -> ist wohl kein banales Problem

Villeicht kommt ja noch eine alternative Idee für die "Nachwelt" bzw. die Forums-suchenden
 

bERt0r

Top Contributor
Du kannst den modalityType auf Document_Modal setzen:
Java:
import java.awt.BorderLayout;
import java.awt.Dialog.ModalityType;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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


public class ModalerDialogKSKB
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
			{
				public void run()
				{
					try
					{
						JFrame frame = new JFrame();
						frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						frame.setBounds(100, 100, 450, 300);
						JButton countButton=new JButton("0");
						countButton.addActionListener(new ActionListener()
						{
							int count=0;
							@Override
							public void actionPerformed(ActionEvent e)
							{
								count++;
								((JButton)e.getSource()).setText(String.valueOf(count));
							}
						});
						frame.add(countButton,BorderLayout.SOUTH);
											
						frame.setVisible(true);
						JDialog modalerDialog=new JDialog();
						modalerDialog.setModalityType(ModalityType.DOCUMENT_MODAL);
						modalerDialog.setBounds(200,200,100,100);
						modalerDialog.setVisible(true);
						System.out.println("Done");
					} catch (Exception e)
					{
						e.printStackTrace();
					}
				}
			});
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
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