gui example create java user-interface

example - Java: Destello de una ventana para captar la atención del usuario



java gui example button (2)

¿Hay una mejor manera de mostrar una ventana en Java que esta:

public static void flashWindow(JFrame frame) throws InterruptedException { int sleepTime = 50; frame.setVisible(false); Thread.sleep(sleepTime); frame.setVisible(true); Thread.sleep(sleepTime); frame.setVisible(false); Thread.sleep(sleepTime); frame.setVisible(true); Thread.sleep(sleepTime); frame.setVisible(false); Thread.sleep(sleepTime); frame.setVisible(true); }

Sé que este código da miedo ... Pero funciona bien. (Debo implementar un bucle ...)


Bueno, hay algunas mejoras menores que podríamos hacer. ;)

Usaría un temporizador para asegurarme de que las personas que llaman no tengan que esperar a que regrese el método. Y también sería bueno evitar más de una operación de flasheo a la vez en una ventana determinada.

import java.util.Map; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; import javax.swing.JFrame; public class WindowFlasher { private final Timer timer = new Timer(); private final Map<JFrame, TimerTask> flashing = new ConcurrentHashMap<JFrame, TimerTask>(); public void flashWindow(final JFrame window, final long period, final int blinks) { TimerTask newTask = new TimerTask() { private int remaining = blinks * 2; @Override public void run() { if (remaining-- > 0) window.setVisible(!window.isVisible()); else { window.setVisible(true); cancel(); } } @Override public boolean cancel() { flashing.remove(this); return super.cancel(); } }; TimerTask oldTask = flashing.put(window, newTask); // if the window is already flashing, cancel the old task if (oldTask != null) oldTask.cancel(); timer.schedule(newTask, 0, period); } }


Hay dos formas comunes de hacerlo: use JNI para establecer sugerencias de urgencia en la ventana de la barra de tareas y cree un icono / mensaje de notificación. Prefiero la segunda forma, ya que es multiplataforma y menos molesto.

Consulte la documentación de la clase TrayIcon , particularmente el método displayMessage() .

Los siguientes enlaces pueden ser de interés: