En Java, ¿hay alguna manera de tener una ventana que esté "Siempre al tope" independientemente de si el usuario cambia el foco a otra aplicación? He buscado en la web y todas las soluciones se basan en algún tipo de interfaz JNI con enlaces nativos. ¿Verdaderamente esta no puede ser la única forma de hacerlo? ... ¿o no?Windows "siempre encendido" con Java
Respuesta
probar este método de la clase Window
:
Window.setAlwaysOnTop(boolean)
Funciona de la misma forma que el valor por defecto en el administrador de tareas de Windows: cambiar a otra aplicación, pero se muestra siempre en la parte superior.
Esto se añadió en Java 1.5
Código de ejemplo:
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Annoying {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello!!");
// Set's the window to be "always on top"
frame.setAlwaysOnTop(true);
frame.setLocationByPlatform(true);
frame.add(new JLabel(" Isn't this annoying?"));
frame.pack();
frame.setVisible(true);
}
}
ventana permanece en la parte superior, incluso cuando no está activo
Desde mi observación me encontró que el privilegio de AlwaysOnTop es g al último proceso que solicitó estar siempre en la cima.
Por lo tanto, si tiene una aplicación en la que setAlwaysOnTop(true)
y más tarde otra aplicación usa esta opción, el privilegio se otorga a la segunda aplicación. Para solucionar este problema, configuré el setAlwaysOnTop(false)
y nuevamente el setAlwaysOnTop(true)
cada vez que aparece una ventana encima de la ventana actual.
Lo he comprobado con wordweb
en windows
. WordWeb es una de las aplicaciones que usa la opción AlwaysOnTop
del OS
No estoy seguro de si funciona correctamente en el escenario del juego.
Advertencia: No estoy al tanto de los efectos secundarios.
Aquí está el ejemplo de código:
import java.awt.event.*;
import javax.swing.*;
public class MainWindow extends JFrame implements WindowFocusListener
{
public MainWindow()
{
addWindowFocusListener(this);
setAlwaysOnTop(true);
this.setFocusable(true);
// this.setFocusableWindowState(true);
panel = new JPanel();
//setSize(WIDTH,HEIGHT);
setUndecorated(true);
setLocation(X,Y);
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
}
public void windowGainedFocus(WindowEvent e){}
public void windowLostFocus(WindowEvent e)
{
if(e.getNewState()!=e.WINDOW_CLOSED){
//toFront();
//requestFocus();
setAlwaysOnTop(false);
setAlwaysOnTop(true);
//requestFocusInWindow();
System.out.println("focus lost");
}
}
private JPanel panel;
private static final int WIDTH = 200;
private static final int HEIGHT = 200;
private static final int X = 100;
private static final int Y = 100;
public static void main(String args[]){
new MainWindow();}
}
Ponerlo en falso y verdadero otra vez cuando otra ventana entra en la parte superior no suena como una solución viable por una simple razón: ¿qué pasa si la otra aplicación hace lo mismo? – Trejkaz
@Trejkaz Bueno, ese es un punto válido. Ya no estoy en contacto con el swing ahora. – pinkpanther
¡Esto funciona perfectamente para mi caso de uso! Volver a establecerlo en falso primero fue la clave. – misaka
- 1. Apagar Windows con Java
- 2. Java regex siempre falla
- 3. ¿Determina si LTE está encendido?
- 4. Xcode Modo DEBUG: ¿cuándo está encendido/apagado?
- 5. ¿Cómo agregar controles deslizantes de encendido/apagado?
- 6. Teclado virtual Delphi 2010, comience con CapsLock encendido?
- 7. ¿Cómo crear un interruptor de encendido/apagado con Javascript/CSS?
- 8. Java Web Start siempre almacena en caché el archivo JNLP en Windows XP
- 9. ¿Hay alguna manera de detectar el estado del monitor en Windows (encendido o apagado)?
- 10. ¿Es un int. Java siempre 32 bits?
- 11. En Java, ¿lo nuevo siempre es nuevo?
- 12. Cacao: evento clave en NSView no encendido
- 13. ¿Cómo detectar si UISwitch está encendido/apagado?
- 14. Windows Phone 7 - Silverlight - Entrada táctil - TouchPoint.Size siempre es 1,1
- 15. FLAG_TURN_SCREEN_ON no siempre funciona
- 16. Usando para siempre con Node.js
- 17. no se puede instalar para siempre en Windows?
- 18. Método para comprobar si BloqMayus está encendido o no en java
- 19. Tarea de ejecución prolongada (o para siempre) en Windows Azure
- 20. archivo en Windows Selección exploradores no siempre funciona
- 21. ¿GetSystemInfo (en Windows) siempre devuelve la cantidad de procesadores lógicos?
- 22. WPF stop ListView ScrollBar encendido haz clic en
- 23. Memoria máxima de Java en Windows XP
- 24. play framework bat windows proceso de java
- 25. ¿Por qué la grabación de video con FFMPEG en Windows siempre da un error?
- 26. Instalando Java manualmente en Windows?
- 27. Query Windows Search de Java
- 28. conectar a la carpeta compartida en Windows con Java
- 29. ¿Cómo comunicarse con un dispositivo USB en Windows y Java?
- 30. ¿Obtiene ID de archivo único en Windows con Java?
Se podría pensar que una simple búsqueda de "aplicación Java siempre en la parte superior" en la tendría esta respuesta, pero no pudo encontrarlo. Gracias. –
Adivina qué. ¡Ahora sí! :) ¡Te trae aquí! http://www.google.com/search?&q=java+application+always+on+top – OscarRyz
Esto es simple e impresionante. También estaba buscando algo como esto, pero no sabía que lo implementaron en Java 1.5. Gracias por publicar. –