AWT/Swing permet d'afficher les boîtes de dialogue modale d'application (bloquant toute l'application) et modale parente (ne bloquant que les parents). Comment puis-je obtenir la même chose avec SWT?Affichage de la boîte de dialogue modale parente avec SWT
Répondre
Afin de bloquer toute l'application, vous pouvez créer la Shell
dialogue avec le style SWT.APPLICATION_MODAL
, ouvrez-le, puis pomper les événements de l'interface utilisateur jusqu'à ce que la coquille est disposé:
Display display = Display.getDefault();
Shell dialogShell = new Shell(display, SWT.APPLICATION_MODAL);
// populate dialogShell
dialogShell.open();
while (!dialogShell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
Si vous voulez bloquer entrez uniquement le parent, essayez d'utiliser le style SWT.PRIMARY_MODAL
, bien que les Javadocs spécifient (comme pour les autres styles modaux) qu'il s'agit d'un indice; c'est-à-dire que différentes implémentations de SWT peuvent ne pas le gérer exactement de la même manière. De même, je ne connais pas une implémentation qui honorerait le style SWT.SYSTEM_MODAL
.
MISE À JOUR: Répondre à premier commentaire
Si vous avez deux ou plusieurs modaux primaires ouvertes en même temps, vous ne pouvez pas utiliser les astuces pour pomper les événements jusqu'à ce que le modal est fermé, car ils pourrait être fermé dans n'importe quel ordre. Le code sera exécuté, mais l'exécution reprendra après la boucle while après la fermeture de la boîte de dialogue en cours et toutes les autres boîtes de dialogue qui ont été ouvertes après elle. Dans ce cas, je voudrais enregistrer un DisposeListener
sur chaque boîte de dialogue pour obtenir un rappel quand ils sont fermés. Quelque chose comme ceci:
void run() {
Display display = new Display();
Shell shell1 = openDocumentShell(display);
Shell shell2 = openDocumentShell(display);
// close both shells to exit
while (!shell1.isDisposed() || !shell2.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Shell openDocumentShell(final Display display) {
final Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new FillLayout());
Button button = new Button(shell, SWT.PUSH);
button.setText("Open Modal Dialog");
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Button pressed, about to open modal dialog");
final Shell dialogShell = new Shell(shell, SWT.PRIMARY_MODAL | SWT.SHEET);
dialogShell.setLayout(new FillLayout());
Button closeButton = new Button(dialogShell, SWT.PUSH);
closeButton.setText("Close");
closeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
dialogShell.dispose();
}
});
dialogShell.setDefaultButton(closeButton);
dialogShell.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
System.out.println("Modal dialog closed");
}
});
dialogShell.pack();
dialogShell.open();
}
});
shell.pack();
shell.open();
return shell;
}
- 1. Boîte de dialogue modale
- 2. Boîte de dialogue modale Jquery avec iframe
- 3. Boîte de dialogue modale avec plusieurs formulaires
- 4. Création d'une boîte de dialogue modale jQuery à partir d'une autre boîte de dialogue modale ouverte
- 5. Comment implémenter correctement une boîte de dialogue modale en haut d'une boîte de dialogue non modale?
- 6. Affichage de la boîte de dialogue personnalisée
- 7. Boîte de dialogue modale Google Maps (JQuery)
- 8. Boîte de dialogue modale jQuery et jqGrid
- 9. JQuery UI Boîte de dialogue modale personnalisée
- 10. Boîte de dialogue modale sur IFrame
- 11. Boîte de dialogue modale simple et TinyMCE
- 12. Boîte de dialogue d'impression modale TWebBrowser?
- 13. problème jQuery-ui avec boîte de dialogue modale de ajax
- 14. Boîte de dialogue jquery modale onclick?
- 15. Boîte de dialogue modale d'une boîte de dialogue modale - les deux se ferment quand la deuxième est fermée - pourquoi?
- 16. Remplacer le document dans la boîte de dialogue modale IE
- 17. Comment éviter la disposition d'une boîte de dialogue modale jQuery
- 18. La boîte de dialogue jQueryUI ne va pas modale
- 19. Récupère la boîte de dialogue modale en cours en Java
- 20. Ouvrir la boîte de dialogue Modal en haut de la page parente à partir d'un Iframe
- 21. Win32: Boîte de dialogue modale ne renvoyant pas le focus
- 22. Affichage du clavier avec une boîte de dialogue Android
- 23. C++ MFC: Comment ouvrir immédiatement une boîte de dialogue secondaire après la création de la première boîte de dialogue modale
- 24. Affichage du texte dans la boîte de dialogue
- 25. Boîte de dialogue flottante non modale dans WPF
- 26. Boîte de dialogue modale d'implémentation dans ASP.NET MVC
- 27. Impossible d'obtenir la boîte de dialogue modale UI jQuery pour être modale
- 28. Fermer boîte de dialogue modale du filet extérieur - C#
- 29. Passer à une autre boîte de dialogue modale dans MFC
- 30. Boîte de dialogue jquery UI Modal dans asp.net usercontrol: Superposition modale uniquement sur Div in UserControl
Merci d'avoir répondu. Lorsque vous utilisez des dialogues 'SWT.PRIMARY_MODAL' sur deux shells différents, comment les boucles d'événements devraient ressembler pour que les dialogues ne bloquent pas l'autre? Peut-être que vous pouvez fournir un exemple de travail complet montrant deux coquilles avec un dialogue parent-modal dans chaque coquille? Merci d'avance. – Mot
(En passant, le style SWT.SHEET est particulièrement approprié pour ces boîtes de dialogue PRIMARY_MODAL Sous Mac OS X, elles font apparaître la boîte de dialogue de la barre de titre du parent et sont visiblement attachées au parent, indiquant clairement il bloque l'interaction de l'interface utilisateur avec son parent uniquement, mais ne sait pas ce qui se passe sur les autres plateformes ...) –