SWT Dialog in Dialog automatisch öffnen

JasDA

Aktives Mitglied
Ich habe einen TitleAreaDialog, in dem es einen Button gibt, um einen zweiten Dialog zu öffnen. So weit, so gut. Aber wie bekomme ich es hin, dass der zweite Dialog automatisch geöffnet wird NACHDEM der erste geöffnet wurde?

In der createDialogArea() gehts leider nicht, da dann nur der zweite geöffnet wird und der erste wird erst nach dessen Schließen wieder angezeigt.
 

jgh

Top Contributor
wenn du auf beiden Dialogs
Code:
setVisible(true)
aufrufst und nichts mit der Methode
Code:
setModal(boolean b)
machst, werden dir auch beide angezeigt.

ansonsten zeig ein KSKB
 

JasDA

Aktives Mitglied
Genau das ist der Punkt. Beide sollen modal sein und deshalb wird der erste Dialog nicht angezeigt bevor der zweite geschlossen wurde. Deshalb suche ich ja nach einer "afterDialogOpen"-Methode. Es muss doch möglich sein auf das Öffnen des Dialogs reagieren zu können?
 

jgh

Top Contributor
das geht aber nicht, dass du 2 modale Diaolgs gleichzeitig hast...das ist doch der Sinn von modalen Dialogen.

Ein modaler Dialog verhindert Eingaben in dem aufrufenden Fenster, bis der Dialog beendet wird!
 

JasDA

Aktives Mitglied
Ich glaube wir reden aneinander vorbei. Ich kann in einem modalen Dialog sehr wohl einen anderen modalen Dialog öffnen. Dann hat dieser neu geöffnete den Focus und der andere wird im Hintergrund angezeigt.

Wie gesagt, es funktioniert von Hand ja wunderbar. Ersten Dialog öffnen --> auf Button klicken --> zweiter Dialog öffnet sich und der erste ist weiterhin im Hintergrund zu sehen.

Und genau diesen Button Klick möchte ich automatisieren.
 

jgh

Top Contributor
wenn du den Button hast und auf Klick das genauso macht wie du willst, warum rufst du dann nicht einfach doClick() auf den Button auf?
 

JasDA

Aktives Mitglied
Lies mal den ersten Beitrag von mir ;-)

Hier aber mal ein Beispiel damit es verständlicher wird. Den Klick auf den Button in Dialog1 möchte ich beim Öffnen von Dialog1 automatisch ausführen.

Java:
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class DialogExample extends ApplicationWindow {

  public DialogExample(Shell parentShell) {
    super(parentShell);
  }

  protected Control createContents(Composite parent) {
    Composite composite = new Composite(parent, SWT.NULL);

    composite.setLayout(new GridLayout());

    final Button btnOpenDialog = new Button(composite, SWT.PUSH);
    btnOpenDialog.setText("Dialog öffnen");
    btnOpenDialog.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
    	  new Dialog1(getParentShell()).open();
      }
    });

    return super.createContents(parent);
  }
  

  public static void main(String[] args) {
    ApplicationWindow window = new DialogExample(null);
    window.setBlockOnOpen(true);
    window.open();
  }
  
  
  class Dialog1 extends TitleAreaDialog 
  {
	public Dialog1(Shell parentShell) {
		super(parentShell);
	}
	  
	@Override
	protected Control createContents(Composite parent) {
		Label label = new Label(parent, SWT.NONE);
		label.setText("Dies ist Dialog 1");
		
		Button btnOpenDialog2 = new Button(parent, SWT.PUSH);
		btnOpenDialog2.setText("Dialog 2 öffnen");
	    btnOpenDialog2.addListener(SWT.Selection, new Listener() {
	        public void handleEvent(Event event) {
	      	  new Dialog2(getParentShell()).open();
	        }
	      });
		return parent;
	}		
  }
  
  
  class Dialog2 extends TitleAreaDialog 
  {
	public Dialog2(Shell parentShell) {
		super(parentShell);
	}
	  
	@Override
	protected Control createContents(Composite parent) {
		Label label = new Label(parent, SWT.NONE);
		label.setText("Dies ist Dialog 2");
		return parent;
	}		
  }
}
 

Michael...

Top Contributor
Zur Problemlösung kann ich nichts beitragen, aber:

jgh bezieht sich aber auf das Swing

hier geht es aber um SWT
OK, hätte ich eine Minute gewartet, hatte man es am Code feststellen können ;-)

Hab grad kein SWT bzw. kein JFace zur Hand und mehr als ein paar Tests habe ich nie damit gemacht. Kann man die open() Methode überschreiben, um darin den zweiten Dialog anzeigen zu lassen?

Wobei sich ein Dialog der automatisch einen zweiten Dialog öffnet, schon fast nach Anwenderfolter anhört ;-)
 

JasDA

Aktives Mitglied
In der open-Methode hatte ich es auch versucht, geht aber leider nicht ohne sie komplett neu zu schreiben.

Das mit der Anwenderfolter musst du mir nicht sagen, die Anforderung kommt explizit von unseren Anwendern. Bei Massenverarbeitung ist jeder zusätzliche Mausklick schon ein Klick zuviel.
 
V

vanny

Gast
Hmm,

ich bin nun auch nicht mit SWT vertraut, aber wenn das Problem daher rührt, dass beide Dialoge modal sind und du den 2. Dialog ja sowieso automatisch öffnest, dann genügt es in diesem Moment ja auch, wenn Dialog Nr. 2 modal ist, weil du an Nr. 1 ja eh nicht dran kommst.
Wenn Nr. 2 geschlossen wird, kannste Nr. 1 ja modal setzen.

Wie gesagt ob´s hilft weiss ich nicht, ist halt nur ein Gedanke.

Gruß Vanny

//Edit:
Ansonsten verzichte einfach auf den zweiten Dialog, nimm ein CardLayout und wechsle einfach die Seite;)
 
Zuletzt bearbeitet von einem Moderator:

JasDA

Aktives Mitglied
Ich hab gerade mal ein wenig mit dem Modal rumgespielt:

Java:
setShellStyle(SWT.TITLE | SWT.MODELESS | SWT.CLOSE);

Das Modal ist aber anscheinend nicht das Problem. Es wird immer nur einer der beiden Dialoge angezeigt, da der Code ja erstmal an der Stelle "steht" an dem ein Dialog geöffnet wird und praktisch erst weiter läuft, wenn der Dialog geschlossen wird.
 

JasDA

Aktives Mitglied
Ich habe es soweit hinbekommen, wenn man den Dialog in einem extra Thread in der createContents() öffnet. Ist nur die Frage ob damit auch sichergestellt ist, dass Dialog2 immer im Vordergrund ist?

Java:
    	Display.getCurrent().asyncExec(new Runnable() {
    	    @Override
    	    public void run() {
    	    	new Dialog2(getParentShell()).open();
    	    }
    	});
 
G

Gast2

Gast
Ich habe es soweit hinbekommen, wenn man den Dialog in einem extra Thread in der createContents() öffnet. Ist nur die Frage ob damit auch sichergestellt ist, dass Dialog2 immer im Vordergrund ist?

Java:
    	Display.getCurrent().asyncExec(new Runnable() {
    	    @Override
    	    public void run() {
    	    	new Dialog2(getParentShell()).open();
    	    }
    	});

Weißt du auch warum du einen extra Thread brauchst???

Mach mal einen Sysout hier rein und schau wann du die Ausgabe siehst

Java:
    btnOpenDialog.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
          new Dialog1(getParentShell()).open();
System.out.println("Weiter gehts";)
      }
    });
 
Zuletzt bearbeitet von einem Moderator:
V

vanny

Gast
So,

1. es ist bei SWING genau das gleiche Verhalten, hab es mal ausprobiert.(die Idee mit dem neuen Thread hatte ich auch;)).

2. ist dieses Dialog-Geballer in meinen Augen nicht schön gelöst. Ich denke mit nur einem modalen Dialog und einem CardLayout fährst du da echt besser, und der User wird nicht mit irgendwelchen Fenstern zugeschmissen. Zudem kannst du dann sicher sein, dass der User auch wirklich sieht, was er sehen soll.

Gruß Vanny
 

JasDA

Aktives Mitglied
Der Kunde will natürlich mal wieder die Quick&Dirty Lösung. Ich finde es selbst ja auch überhaupt nicht schön. Werde aber mal in einer ruhigen Minute deinen Vorschlag mit dem CardLayout ausprobieren. Auf jeden Fall erstmal Danke.
 
G

Gast2

Gast
Der Kunde will natürlich mal wieder die Quick&Dirty Lösung. Ich finde es selbst ja auch überhaupt nicht schön. Werde aber mal in einer ruhigen Minute deinen Vorschlag mit dem CardLayout ausprobieren. Auf jeden Fall erstmal Danke.

CardLayout ist Swing

Schau mal hier:
Mit
Code:
btnOpenDialog2.notifyListeners(SWT.Selection, new Event());
kannst du einen programmtischen klick ausführen. Natürlich nachdem dein listener registriert wird.


Java:
  class Dialog1 extends TitleAreaDialog 
  {
    public Dialog1(Shell parentShell) {
        super(parentShell);
    }
      
    @Override
    protected Control createContents(Composite parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText("Dies ist Dialog 1");
       
        Button btnOpenDialog2 = new Button(parent, SWT.PUSH);
       
        btnOpenDialog2.setText("Dialog 2 öffnen");
        btnOpenDialog2.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
              new Dialog2(getParentShell()).open();
            }
          });
        btnOpenDialog2.notifyListeners(SWT.Selection, new Event());
        return parent;
    }       
  }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Automatisch einen Dialog schliessen AWT, Swing, JavaFX & SWT 15
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
melaniemueller Confirmation Dialog erstellen AWT, Swing, JavaFX & SWT 18
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
E Swing Dialog modal aufrufen AWT, Swing, JavaFX & SWT 2
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
J JavaFX Dialog - Style AWT, Swing, JavaFX & SWT 6
D Swing Dynamisches Dialog UI AWT, Swing, JavaFX & SWT 8
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
D Neues Dialog Mittig auf dem Bildschirm AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Grafikproblem nach Aufruf von JColorChooser-Dialog AWT, Swing, JavaFX & SWT 6
M Java FX Innerhalb einem FXML-Dialog weiteren FXML-Dialog einblenden AWT, Swing, JavaFX & SWT 3
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
M Benutzer-Dialog ohne System.in/out AWT, Swing, JavaFX & SWT 2
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
F Dialog mit Titel, Text und Ok Button AWT, Swing, JavaFX & SWT 2
TheWhiteShadow SWT Dialog Titel setzen AWT, Swing, JavaFX & SWT 6
VfL_Freak Darstellungsproblem mit Dialog AWT, Swing, JavaFX & SWT 8
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
G Nebenläufiger Prozess mit Dialog AWT, Swing, JavaFX & SWT 2
C Swing Fortschrittsanzeige im Dialog ohne Fortschrittsbalken und Abbruchoption AWT, Swing, JavaFX & SWT 7
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
R DnD in modalem Dialog AWT, Swing, JavaFX & SWT 4
I Dialog zum Speichern? AWT, Swing, JavaFX & SWT 16
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
N Modaler Dialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
H Confirm Dialog erweitern AWT, Swing, JavaFX & SWT 5
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
B Gestaltung eines Optionen-Dialog AWT, Swing, JavaFX & SWT 16
P Swing Option zeitbeschränkt in modalem Dialog anbieten AWT, Swing, JavaFX & SWT 2
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
L AWT Window, Dialog und verschiedene Betriebssysteme AWT, Swing, JavaFX & SWT 2
T SWT Window Builder Pro File Dialog anzeigen AWT, Swing, JavaFX & SWT 10
A Swing Delay (1-4 Sek.) bei JTable und Dialog beim ersten Ausführen AWT, Swing, JavaFX & SWT 3
P Swing modaler dialog AWT, Swing, JavaFX & SWT 3
P SWT Dialog AWT, Swing, JavaFX & SWT 3
O Login Dialog zweimal öffnen AWT, Swing, JavaFX & SWT 2
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
N Swing eigenen Dialog erstellen AWT, Swing, JavaFX & SWT 8
C Swing Fehlermeldung in einem Dialog anzeigen AWT, Swing, JavaFX & SWT 2
L Dialog mit Dauerschleifen AWT, Swing, JavaFX & SWT 4
K SWT TableViewer refresh() im Dialog AWT, Swing, JavaFX & SWT 2
Semox Swing FileSaveAs Dialog Problem AWT, Swing, JavaFX & SWT 14
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
B Dialog aus DB Struktur erstellen AWT, Swing, JavaFX & SWT 4
D URL Dialog AWT, Swing, JavaFX & SWT 2
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
J nicht weckklickbarer dialog AWT, Swing, JavaFX & SWT 15
S Frame - Panel - Dialog rückgabe wert AWT, Swing, JavaFX & SWT 5
D Swing Dialog schließen verhindern bei Fehleingabe AWT, Swing, JavaFX & SWT 2
F JColorChooser NICHT im Dialog AWT, Swing, JavaFX & SWT 12
C Swing Mit jTree ein Ordneröffnen Dialog machen? Und Ordner Inhalt auslesen? AWT, Swing, JavaFX & SWT 4
N SWT Dialog mit swt-widgets AWT, Swing, JavaFX & SWT 5
L AWT Daten vom Dialog an Frame senden AWT, Swing, JavaFX & SWT 3
Lurch Swing Dialog erbt von Dialog? AWT, Swing, JavaFX & SWT 28
eQuest Durchsuchen Dialog AWT, Swing, JavaFX & SWT 6
D ausgewählte Textstellen scheinen durch Dialog durch AWT, Swing, JavaFX & SWT 7
S Modalen Dialog nachbauen..? AWT, Swing, JavaFX & SWT 4
E Swing Rückgabe eines Wertes aus einem Dialog zu einem Dialog AWT, Swing, JavaFX & SWT 4
W Swing Problem beim Passwort Dialog AWT, Swing, JavaFX & SWT 4
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
C requestFocus bei modalem Dialog AWT, Swing, JavaFX & SWT 3
5 Mod.Dialog reagiert n.auf ActionListener seiner Komponenten AWT, Swing, JavaFX & SWT 4
A Bitte warten Dialog AWT, Swing, JavaFX & SWT 4
G SWT Dialog AWT, Swing, JavaFX & SWT 7
GilbertGrape EXIT_ON_CLOSE in Dialog AWT, Swing, JavaFX & SWT 3
T JFileChooser: beim Save Dialog einen Dateinamen vorgeben? AWT, Swing, JavaFX & SWT 6
K Druck-Dialog AWT, Swing, JavaFX & SWT 4
D JTable nach Öffnen-Dialog umbaun AWT, Swing, JavaFX & SWT 5
K Dialog schliesst sich nicht. Warum? AWT, Swing, JavaFX & SWT 11
J dialog AWT, Swing, JavaFX & SWT 5
H nicht modaler Dialog verdeckt modalen Dialog AWT, Swing, JavaFX & SWT 5
S Probl. bei Java Programm - Dialog zum Bearbeiten von Bildern AWT, Swing, JavaFX & SWT 4
W Wie macht man so nen Settings Dialog AWT, Swing, JavaFX & SWT 2
K Datei öffnen Dialog AWT, Swing, JavaFX & SWT 5
K Dialog aus einem Dialog öffnen AWT, Swing, JavaFX & SWT 4
S preference dialog öffnen AWT, Swing, JavaFX & SWT 8
spacegaier Fehler beim Aufrufen von Dialog aus ActionListener AWT, Swing, JavaFX & SWT 12
B Confirmation Dialog AWT, Swing, JavaFX & SWT 2
T DIALOG für BEENDEN AWT, Swing, JavaFX & SWT 11
N Dialog text bis zum nächsten öffnen sichern AWT, Swing, JavaFX & SWT 4
G Dialog ohne Titelleiste AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen


Oben