# JDialog und Singleton



## HakBak (20. Aug 2009)

Hallo, 
ich habe einen JDialog als Singleton implementiert. In diesem Dialog wird einfach ein Textfeld befüllt und über einen Button wird es geschlossen.
Der Dialog wird über mein Hauptprogramm geöffnet, sobald ein bestimmter Button gedrückt wurde. Nun ist es aber so, dass sich der Dialog, wenn er einmal geschlossen wurde, nciht mehr mit dem Button aus dem Hauptprogramm öffnen lässt. Das liegt wohl irgendwie am Singleton, denke ich oder/und auch daran, dass ich den Dialog mit dispose() schließe. Ich bin mir da aber nicht so sicher.
Hier mal ein wenig Code:

```
private static InfoDialog INFO_DIALOG = new InfoDialog();
private InfoDialog() {...}
...onButton...{
this.dispose();}
public static InfoDialog getInstance(){
        return INFO_DIALOG;
    }
```


```
private void createInfoDialog(String biscountry) {
        String nameList = "...";
        InfoDialog.getInstance().setTextAreaText(nameList);
    }
```

Danke


----------



## Verjigorm (20. Aug 2009)

Du hättest genausogut NICHTS posten können, dann wären wir vermutlich genauso schlau wie auch jetzt.

Wieso machst du aus einem JDialog einen Singleton?
Das ist doch an sich Blödsinn


----------



## SlaterB (20. Aug 2009)

nunja, das dispose() ist doch hilfreich, ein dispose-der Dialog kann gewiss kein zweites Mal geöffnet werden,
vielleicht reicht setVisible(true/ false)


----------



## HakBak (20. Aug 2009)

Ich möchte, dass das Fenster nur einmal geöffnet werden kann. Deswegen habe ich das gemacht.


----------



## SlaterB (20. Aug 2009)

Widerspruch zu
> Nun ist es aber so, dass sich der Dialog, wenn er einmal geschlossen wurde, nciht mehr mit dem Button aus dem Hauptprogramm öffnen lässt.
?
oder ist 'das Fenster' was anderes als 'der Dialog'?


----------



## Verjigorm (20. Aug 2009)

HakBak hat gesagt.:


> Ich möchte, dass das Fenster nur einmal geöffnet werden kann. Deswegen habe ich das gemacht.



Mach den Dialog modal, dann kann man ihn nur einmal öffnen (vom Hauptprogramm aus)


----------



## tfa (20. Aug 2009)

Verjigorm hat gesagt.:


> Mach den Dialog modal, dann kann man ihn nur einmal öffnen (vom Hauptprogramm aus)


Dialoge sollten nur modal sein, wenn sie modal sein müssen (und nicht aus Faulheit, weil die einfacher zu programmieren sind). Ein Info-Dialog muss höchstwahrscheinlich nicht modal sein.


----------



## Verjigorm (20. Aug 2009)

tfa hat gesagt.:


> Dialoge sollten nur modal sein, wenn sie modal sein müssen (und nicht aus Faulheit, weil die einfacher zu programmieren sind). Ein Info-Dialog muss höchstwahrscheinlich nicht modal sein.



Aus diesem Grund sich wohl alle JOptionPanes modal ...
*ironieaus*


----------



## Gast2 (20. Aug 2009)

tfa hat gesagt.:


> Dialoge sollten nur modal sein, wenn sie modal sein müssen (und nicht aus Faulheit, weil die einfacher zu programmieren sind). Ein Info-Dialog muss höchstwahrscheinlich nicht modal sein.



Warum sollte ein InfoDialog nicht modal sein?????
Also in webanwendungen sind sie glaub meistens nicht modal...
aber in client anwendungen sind die meisten modal...

@TS:
du brauchst doch kein singelton frag doch einfach bei deinem button ab ob der dialog gerade angezeigt wird oder nicht dialog.getVisible() und je nachdem machst du etwas oder lässt es einfach so


----------



## tfa (20. Aug 2009)

SirWayne hat gesagt.:


> Warum sollte ein InfoDialog nicht modal sein?????


Warum sollten sie es? Modale Dialoge schränken den Benutzer ein, und normalerweise mögen Benutzer es nicht, wenn sie grundlos in ihren Möglichkeiten beschränkt werden.
Vielleicht möchte er sich Infos über verschiedene Elemente seiner Anwendung gleichzeitig anzeigen (kommt auch drauf an, was man unter so einem Dialog versteht. Ich meinte jetzt allgemein einen Dialog zur Anzeige von beliebigen Informationen).

Oder ich will bei geöffnetem Info-Dialog weiter mit der Anwendung arbeiten. Das geht mit modalen Dialogen nicht. 
Stell dir vor, du hast ein Problem mit deinem Webbrowser, das du in einem Forum oder der  Hotline beschreiben willst. Dazu musst du die genaue Versionsnummer samt Patchlevel in ein Webformular eintippen. In Firefox kannst du den (nicht-modalen) Info-Dialog öffnen und die Nummern abtippen. In IE geht das nicht wegen des modalen Dialogs (jedenfalls in IE V6 - den ich hier noch benutzen muss).



			
				Verjigorm hat gesagt.:
			
		

> Aus diesem Grund sich wohl alle JOptionPanes modal ...
> *ironieaus*


Was haben jetzt JOptionPanes mit Info-Dialogen zu tun?


----------



## Verjigorm (20. Aug 2009)

Was sind denn für dich Info-Dialoge?
Dialoge mit Tabellen, Bildern, etc?

Für mich ist ein einfacher Info-Dialog (wie hier in dem Beispiel beschrieben) eindeutig ein JOptionPane.
Und so würde ich es auch lösen, mit fertigen Dialogen.


----------



## Gast2 (20. Aug 2009)

Ich hab ja nichts dagegen gesagt^^...
Für mich ist der InfoDialog der About Dialod(hab ich angenommen) und der ist den meisten client anwendungen modal... mehr hab ich nicht gesagt!!!

wie gesagt ist ja auch net so schwer es anders zu machen


```
public class OpenAboutDialog extends AbstractAction {
		private JDialog dialog;

		public OpenAboutDialog(JDialog dialog, String name, Icon icon) {
			super(name, icon);
			this.dialog = dialog;
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			if (dialog.isVisible()) {
				dialog.requestFocus();
			} else {
				dialog.setVisible(true);
			}

		}

	}
```


----------

