java - tipos - ¿Cómo puedo flashear la barra de tareas de Windows usando Swing?
swing java pdf (5)
Estoy desarrollando una aplicación Swing y necesito mostrar la barra de tareas de Windows. No puedo usar frame.requestFocus()
porque no quiero robar el foco de ninguna otra aplicación.
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 a frame.toFront () en un marco minimizado siempre lo haría parpadear ...
Usando Swing per se, muy probablemente no puedas; eso es algo específico de Widnows.
JNIWrapper con su extensión winpack puede hacer lo que quieras.
La demostración en el sitio lo muestra en acción.
Puedes forzar a minimizar tu GUI y .toFront
-en él:
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 lamentablemente eliminará 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 FlashWindow
a la verdadera raíz del asunto mediante el uso de una DLL FlashWindow
en FlashWindow
. Llamar a dlls no es posible con el código limpio de Java, necesitará la ayuda de otros lenguajes de programación, es posible, por ejemplo, con JNA . Aparte de eso, también puede escribir su propio programa en otro idioma y llamarlo desde su aplicación Java. Daré un ejemplo en AutoHotkey a continuación:
Código de 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
, puesto en su directorio de trabajo Java, puede llamarlo desde cualquier función:
Runtime.getRuntime().exec("./flash.exe /"" + MyJFrame.getTitle() + "/"");
Alternativamente, uno podría usar 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 aún tiene problemas para lograr el flasheo en la barra de tareas de Windows, ¡por favor hágamelo saber!
La mejor manera de hacer esto:
if (!isFocused()) {
setVisible(false);
setVisible(true);
}