2009-01-28 8 views

Respuesta

12

No sé si se aplica a las versiones más nuevas de Windows, pero el método .toFront() utiliza para mostrar la ventana si ninguna de las ventanas actuales de la máquina virtual estaba en primer plano.

Esto significa que llamar frame.toFront() en un marco minimizado siempre que parpadee ...

+5

Hay una desventaja de este enfoque. Si un usuario está en la aplicación, escribiendo en un JTextArea, por ejemplo, esta funcionalidad elimina el foco y altera la escritura. –

0

Al usar Swing per se, es muy probable que no pueda; eso es algo específico de Widnows.

+0

Uh, y? La barra de tareas de Windows todavía es específica de Windows. –

1

Puede fuerza minimizar su interfaz gráfica de usuario y .toFront -en que:

 Gui.frame.setState(Frame.ICONIFIED); 
     for (int i = 0; i < 3; i++) { 
      Thread.sleep(10); 
      Gui.frame.toFront(); 
      Thread.sleep(10); 
      Gui.frame.setVisible(false); 
      Thread.sleep(10); 
      Gui.frame.toBack(); 
      Thread.sleep(10); 
      Gui.frame.setVisible(true); 
     } 
     // be creative!! 

que por desgracia va a quitar el foco de la ventana activa. Puede encontrar la ventana activa y reactivarla luego. Pero aún así, el flasheo solo durará unos tres segundos.

... o llegar a la raíz de la cuestión mediante el uso de DLL -call en FlashWindow. Llamar a dlls no es posible con el código limpio de Java, necesitará la ayuda de otros lenguajes de programación, por ejemplo, con JNA. Aparte de eso, también puede escribir su propio programa en otro idioma y llamarlo desde su aplicación Java. Voy a dar un ejemplo en el AutoHotkey a continuación:

Código AutoHotkey:

if 0 != 1  ; note: in ahk, 1 corresponds args[1] and 0 corresponds args.length 
    { 
     msgbox, There needs to be ONE parameter passed over to this file, which is the name of the window that should be flashed. 
     ExitApp 
    } 
    programName = %1% 
    winget, hWnd, ID, %programName% 
    DllCall("FlashWindow",UInt,hWnd,Int,True) 

compilado en un archivo llamado flash.exe, poner en su directorio de trabajo de Java, se puede llamar desde cualquier función:

Runtime.getRuntime().exec("./flash.exe \"" + MyJFrame.getTitle() + "\""); 

Como alternativa, se podría utilizar AutoHotkey.dll y acceder a él dentro de Javacode (hay guías sobre cómo hacerlo en Internet), por lo que no habría necesidad de ningún archivo exe externo.

Si todavía tiene problemas para lograr el flasheo en la barra de tareas de Windows, ¡por favor hágamelo saber!

0

La mejor manera de hacer esto:

if (!isFocused()) { 
     setVisible(false); 
     setVisible(true); 
    } 
Cuestiones relacionadas