Prüfung auf Existenz eines Dialogfensters

Diskutiere Prüfung auf Existenz eines Dialogfensters im Java Basics - Anfänger-Themen Bereich.
T

tanechka

Hallo zusammen,

ich habe folgendes Problem... In meinem Hauptfenster habe ich einen Button, sein SelectionListener führt zum Öffnen eines Dialogfensters. Wenn ich aber mehrere Mals den Button betätige, habe ich dann mehrere Dialogfenster. Ich suche nach der Lösung, wie man auf Existenz eines Dialogfensters prüfen kann. So kann ich verhindern, dass mehrere Dialogfenster geöffnet werden.

Dialog:
Code:
package main_gui.gui;

import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class TestDialog extends Dialog {

 protected Object result;
 protected Shell shell;

 /**
  * Create the dialog.
  * @param parent
  * @param style
  */
 public TestDialog(Shell parent, int style) {
  super(parent, style);
  setText("SWT Dialog");
 }

 /**
  * Open the dialog.
  * @return the result
  */
 public Object open() {
  createContents();
  shell.open();
  shell.layout();
  Display display = getParent().getDisplay();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch()) {
    display.sleep();
   }
  }
  return result;
 }

 /**
  * Create contents of the dialog.
  */
 private void createContents() {
  shell = new Shell(getParent(), getStyle());
  shell.setSize(450, 300);
  shell.setText(getText());

 }

}
Aufruf:
Code:
@Override
            public void widgetSelected(SelectionEvent e) {
                TestDialog gui = new TestDialog(shell, SWT.ARROW_UP);
                Object result = gui.open();
            }
Vielen Dank im Voraus für eure Hilfe
 
J

JustNobody

Wenn Du die Instanz von TestDialog statt in einer lokalen Variable in einer Instanzvariable halten würdest, dann kannst Du doch prüfen, ob dieses noch offen ist. Oder du prüfst auf null und setzt es halt nach übernehmen des Ergebnisses wieder auf null.
 
T

tanechka

Vielen Dank für den Vorschlag. Ich habe die Variable gui als Instanz definiert:

Code:
public void widgetSelected(SelectionEvent e) {
                if (gui == null) {
                    gui = new TestDialog(shell, SWT.ARROW_UP);
                    gui.open();
                    if (gui != null & gui.getShell() != null & gui.getShell().isDisposed()) {
                        gui = null;
                    }
                }
            }
        });
So funktioniert das, wie ich das wollte.
 
L

lam_tr

Vielen Dank für den Vorschlag. Ich habe die Variable gui als Instanz definiert:

Code:
public void widgetSelected(SelectionEvent e) {
                if (gui == null) {
                    gui = new TestDialog(shell, SWT.ARROW_UP);
                    gui.open();
                    if (gui != null & gui.getShell() != null & gui.getShell().isDisposed()) {
                        gui = null;
                    }
                }
            }
        });
So funktioniert das, wie ich das wollte.
So konntest du den Dialog nur einmal öffnen, wann setzt du gui wieder auf null?

Ich denke so würde es auch gehen (ungetestet)
Code:
        Dialog d;
       boolean isOpened = d.getParent().isVisible()
 
T

tanechka

In dem Listener setze ich bim Dispose auf null
Code:
button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (gui == null) {
                    gui = new TestDialog(shell, SWT.ARROW_UP);
                    gui.open();
                    if (gui != null & gui.getShell() != null & gui.getShell().isDisposed()) {
                        gui = null;
                    }
                }
            }
        });
Bem Schießen des Dialoges wird gui auf null gesetzt.
 
L

lam_tr

In dem Listener setze ich bim Dispose auf null
Code:
button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (gui == null) {
                    gui = new TestDialog(shell, SWT.ARROW_UP);
                    gui.open();
                    if (gui != null & gui.getShell() != null & gui.getShell().isDisposed()) {
                        gui = null;
                    }
                }
            }
        });
Bem Schießen des Dialoges wird gui auf null gesetzt.
Achso stimmt, zu schnell gelesen.
 
Thema: 

Prüfung auf Existenz eines Dialogfensters

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben