JDialog (modal) blockiert alle Fenster!

andreT

Aktives Mitglied
Hallo,

Swing ist ja immer für'n Schmankerl gut! Ich habe das Problem daß ein modaler JDialog alle Fenster
blockt. Ich dachte das sei immer nur auf den Owner bezogen/beschränkt! Bsp. :

Java:
JFrame f1 = new JFrame("f1");
JDialog d1 = new JDialog(f1);
d1.setTitle("d1");
d1.setModal(false);
		
JFrame f2 = new JFrame("f2");
JDialog d2 = new JDialog(f2);
d2.setTitle("d2");
d2.setModal(true);
		
// Ab hier nur noch Position und Anzeige !
f1.setLocation(new Point(100, 100));
f1.setVisible(true);
d1.setLocationRelativeTo(f1);
d1.setVisible(true);
		
f2.setLocation(new Point(100, 300));
f2.setVisible(true);
d2.setLocationRelativeTo(f2);
d2.setVisible(true);

Wenn man das Beispiel startet blockiert d2 alle anderen Fenster! Was nun? Wie sag ich d2 daß nur f2 blockiert werden soll ???:L
 
Danke! So klappts :

Java:
JFrame f1 = new JFrame("f1");
JDialog d1 = new JDialog(f1);
d1.setTitle("d1");
d1.setModal(false);
        
JFrame f2 = new JFrame("f2");
JDialog d2 = new JDialog(f2);
d2.setTitle("d2");
d2.setModal(true);
d2.setModalityType(ModalityType.DOCUMENT_MODAL);
        
// Ab hier nur noch ...

Allerdings darf setModalityType(ModalityType.DOCUMENT_MODAL) (obwohl es so nicht konkret in der API steht) erst NACH setModal(true) aufgerufen werden!

Für die Nachwelt : Wenn d1 auch modal sein soll, müssen die f1/d1 und f2/d2 Fenster jeweils in einem eigenen Thread gestartet werden. Anderfalls blockt (seltsamerweise?!) d1 dann doch das Öffnen von f2/d2!
Die Threads können dann z.B. so aussehen :

Java:
class T1 extends Thread {
	public void run() {
		JFrame f1 = new JFrame("f1");
		JDialog d1 = new JDialog(f1);
		d1.setTitle("d1");
		d1.setModal(true);
		d1.setModalityType(ModalityType.DOCUMENT_MODAL);
		// Ab hier nur noch Position und Anzeige !
		f1.setLocation(new Point(100, 100));
		f1.setVisible(true);
		d1.setLocationRelativeTo(f1);
		d1.setVisible(true);
	}
}
T1 t1 = new T1();
t1.start();
		
class T2 extends Thread {
	public void run() {
		JFrame f2 = new JFrame("f2");
		JDialog d2 = new JDialog(f2);
		d2.setTitle("d2");
		d2.setModal(true);
		d2.setModalityType(ModalityType.DOCUMENT_MODAL);
		// Ab hier nur noch Position und Anzeige !
		f2.setLocation(new Point(100, 300));
		f2.setVisible(true);
		d2.setLocationRelativeTo(f2);
		d2.setVisible(true);
	}
}
T2 t2 = new T2();
t2.start();

Gruß
andre
 

Zurück
Oben