2009-01-13 698 views
11

Tengo un problema actualmente para mi aplicación de recordatorio de swing, que puede minimizar a la bandeja al cerrar. Mi problema aquí es que necesito el cuadro de diálogo JOptionPane para que aparezca a tiempo de acuerdo con lo que establecí, pero el problema aquí es que, cuando lo minimizo, aparecerá el diálogo, pero no en la parte superior de las ventanas cuando otra aplicación como explorer, firefox se está ejecutando, ¿alguien sabe cómo abrir el cuadro de diálogo en la parte superior de las ventanas sin importar qué aplicación se esté ejecutando?JOptionPane no mostrará su cuadro de diálogo en la parte superior de otras ventanas

Respuesta

3

Windows bloquea esta operación desde XP.

El escenario anterior era como: Su una sugerencia en un texto en un editor y no reconoce que otro diálogo está llegando al frente cuando está inclinando el texto. El próximo diálogo obtiene el foco y usted está inclinando el nuevo diálogo. Tal vez hace clic en entrar después de que esté listo y hace esto en el diálogo mal, que se le pregunta si realmente quiere delet su disco duro;)

La venido a llamar delante en Java sólo se está trabajando para las ventanas de Java.

La posibilidad de notificar al usuario de una nueva ventana es implementar un Marco, que se resaltará/parpadeará en la barra de tareas de Windows.

+0

Para ampliar en el comentario, que es realmente bueno. Utilice algo que amplíe JFrame en lugar de algo que amplíe JDialog para obtener algo que destelle en la barra de tareas cuando invoque traer al frente –

1

Puede pensar en utilizar un JFrame en su lugar. Puede darte un poco más de flexibilidad.

Si está utilizando un JFrame y quiere que en Emergente en la parte superior de las otras ventanas usar:

myFrame.setVisible(true); 
myFrame.setState(Frame.NORMAL); 

El setstate mostrará la ventana para el usuario si estaba en estado minimizado previamente.

4

¿Está utilizando uno de los JOptionPanes enlatados? (Como JOptionPane.showCOnfirmDialog (...))

Es posible que desee consultar la extensión de JDialog y crear su propio panel de diálogo, y luego llamar a myDialog.setAlwaysOnTop (true);

3

Corrección del post anterior ..

tengo resolver mi problema de la siguiente manera:

this.setVisible(true); // show main frame 
MyDialog dialog = New MyDialog(this, true); // show my custom dialog 
dialog.setVisible(true); 
this.setVisible(false); 

funciona bien para mí :)

10

Crear un JFrame, respectivamente maniquí vacío, ajustado siempre en la parte superior y utilícelo como componente para JOptionPane en lugar de nulo. Entonces JOptionPane permanece siempre en la parte superior de todas las demás ventanas de una aplicación. También puede determinar dónde aparece JOptionPane en la pantalla con la ubicación del JFrame ficticio.

JFrame frmOpt; //dummy JFrame 

private void question() { 
    if (frmOpt == null) { 
     frmOpt = new JFrame(); 
    } 
    frmOpt.setVisible(true); 
    frmOpt.setLocation(100, 100); 
    frmOpt.setAlwaysOnTop(true); 
    String[] options = {"delete", "hide", "break"}; 
    int response = JOptionPane.showOptionDialog(frmOpt, msg, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, "delete"); 
    if (response == JOptionPane.YES_OPTION) { 
     removeRow(); 
    } 
    frmOpt.dispose(); 
} 
5

Publicación anterior, pero estaba luchando con esto.

Mi problema fue más con Javafx que permite que JOptionPane vaya detrás de la ventana de Java actual.

Por lo tanto, utilicé lo siguiente que hace lo que el cartel original pedía poniendo el JOptionPane delante de todas las ventanas; incluso JAVAFX.

primer lugar, la edad JOptionPane:

JOptionPane.showMessageDialog(null, "Here I am"); 

Ahora un JOptionPane que se mantiene delante:

final JDialog dialog = new JDialog(); 
dialog.setAlwaysOnTop(true);  
JOptionPane.showMessageDialog(dialog, "Here I am"); 

Y para la diversión aquí es todo en una sola línea:

JOptionPane.showMessageDialog(
       ((Supplier<JDialog>)() -> {final JDialog dialog = new JDialog(); dialog.setAlwaysOnTop(true); return dialog;}).get() 
       , "Here I am"); 

Usted puede hacer un método estático en algún lugar que devuelva el JDialog por usted y luego simplemente llamarlo en JOptionPan e para limpiar tu código un poco.

Cuestiones relacionadas