AWT/Swing permite mostrar los cuadros de diálogo de la aplicación modal (bloqueo de toda la aplicación) y modal modal (bloqueando solo los padres). ¿Cómo puedo lograr lo mismo con SWT?Mostrar diálogo modal principal con SWT
Respuesta
Con el fin de bloquear toda la aplicación, puede crear el cuadro de diálogo Shell
con el estilo SWT.APPLICATION_MODAL
, abrirlo, y luego bombear los eventos de interfaz de usuario hasta que la carcasa está dispuesto:
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 desea bloquear entrada solo para el padre, intente usar el estilo SWT.PRIMARY_MODAL
, aunque los Javadocs especifican (como para los otros estilos modales) que esto es una pista; es decir, que diferentes implementaciones de SWT pueden no manejarlo exactamente de la misma manera. Del mismo modo, no sé de una implementación que honre el estilo SWT.SYSTEM_MODAL
.
ACTUALIZACIÓN: Respuesta a la primera observación
Si tiene dos o más modales primarias abiertas al mismo tiempo, no se pueden utilizar los trucos para bombear los eventos hasta que el modal se cerró, ya que podría cerrarse en cualquier orden El código se ejecutará, pero la ejecución se reanudará después del ciclo while después de que se cierre el cuadro de diálogo actual y todos los demás cuadros de diálogo que se hayan abierto después de. En este caso, registraría un DisposeListener
en cada diálogo para obtener una devolución de llamada cuando estén cerrados. Algo como esto:
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. Qt diálogo modal y proceso principal
- 2. MFC: ventana principal atenuada al mostrar el cuadro de diálogo modal
- 3. Diálogo no modal sincronizado
- 4. cómo usar jQuery para mostrar un diálogo no modal?
- 5. jQuery diálogo modal y jqGrid
- 6. jquery diálogo modal onclick?
- 7. Mostrar diálogo con MVVM Light toolkit
- 8. ¿Cómo implementar correctamente un diálogo modal en la parte superior de un diálogo no modal?
- 9. rieles y forma de diálogo jQuery modal
- 10. jQuery diálogo modal botón de texto
- 11. ¿Cómo puedo mostrar un cuadro de diálogo no modal y mostrar información en él de inmediato?
- 12. ¿Cómo mostrar un CDialog no modal?
- 13. Cómo hacer desplazamiento modal con la página principal
- 14. Diálogo flotante no modal en WPF
- 15. Modal ConfirmDialog sobre diálogo modal -> todo está bloqueado
- 16. ¿Por qué un diálogo modal/no modal se denomina modal/no modal?
- 17. ¿Diálogo como ventana principal?
- 18. El diálogo Primefaces con modal = true no funciona correctamente
- 19. ¿Mostrando un diálogo modal con jquery ui sin un elemento?
- 20. jQuery UI diálogo modal no bloquea
- 21. ALT + TAB no funciona después de mostrar cuadro de mensaje de diálogo modal
- 22. ¿Cómo mostrar una imagen con swt en java?
- 23. Cómo cerrar un cuadro de diálogo modal de jquery y actualizar la página principal
- 24. opción jQuery diálogo modal no funciona
- 25. jQuery formulario modal diálogo devolución de mensaje
- 26. Cómo mostrar y administrar un cuadro de diálogo simple de aplicación-modal en Cocoa
- 27. Mostrar el cuadro de diálogo de jquery en la ventana principal
- 28. Qt, el cuadro de diálogo no modal no se cierra
- 29. ¿Cómo se hace un diálogo modal en WPF?
- 30. ¿Cómo hacer que el diálogo de jQuery sea modal?
Gracias por responder. Al usar diálogos 'SWT.PRIMARY_MODAL' en dos shells diferentes, ¿cómo deberían verse los bucles de eventos para que los diálogos no bloqueen el otro? ¿Tal vez pueda proporcionar una muestra de trabajo completa mostrando dos proyectiles con un cuadro de diálogo modal principal en cada caparazón? Gracias por adelantado. – Mot
(Por cierto, el estilo SWT.SHEET es especialmente apropiado para estos cuadros de diálogo PRIMARY_MODAL. En Mac OS X, hacen que el cuadro de diálogo parezca salir de la barra de título del elemento primario y está visiblemente unido al elemento principal, lo que indica claramente está bloqueando la interacción de UI con su padre solamente. Sin embargo, no sé qué sucede en otras plataformas ...) –