# JDialog (modal) blockiert alle Fenster!



## andreT (25. Jul 2012)

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. :


```
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


----------



## bERt0r (26. Jul 2012)

Da wird dir wahrscheinlich diese Methode weiterhelfen: setModalityType()
Wenn probier mal die 4 ModalityTypes durch, ich glaube Document ist das was du haben willst.


----------



## andreT (26. Jul 2012)

Danke! So klappts : 


```
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 : 


```
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


----------

