2009-11-20 18 views
7

Estoy tratando de crear una pantalla de estilo HUD para una aplicación en el extranjero.¿Cómo crear una ventana de superposición en Java?

Para hacer esto, necesitaría hacer una ventana de superposición transparente, que se colocaría en la parte superior de la ventana de la aplicación extranjera. La ventana de superposición debería permitirme colocar widgets y dibujar texto en él. Los eventos deben ser reenviados a la ventana subyacente, si ocurren en el área transparente (y de lo contrario permiten que los widgets funcionen como esperado).

Estoy haciendo esto en OSX con Java. Espero hacerlo con Java puro con portabilidad a otras plataformas, pero si no fuera posible, estaría bien con las soluciones que me permitieran hacer esto en OSX a través de Cocoa (Rococoa) o Carbono.

+0

¿Tiene una captura de pantalla de otra aplicación? – OscarRyz

Respuesta

17

En realidad, pude resolver esto por mi cuenta. Parece ser más fácil de lo que esperaba:

public class Overlay { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Transparent Window"); 
     frame.setUndecorated(true); 
     frame.setBackground(new Color(0, 0, 0, 0)); 
     frame.setAlwaysOnTop(true); 
     // Without this, the window is draggable from any non transparent 
     // point, including points inside textboxes. 
     frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false); 

     frame.getContentPane().setLayout(new java.awt.BorderLayout()); 
     frame.getContentPane().add(new JTextField("text field north"), java.awt.BorderLayout.NORTH); 
     frame.getContentPane().add(new JTextField("text field south"), java.awt.BorderLayout.SOUTH); 
     frame.setVisible(true); 
     frame.pack(); 
    } 
} 
+3

¡no te olvides de "frame.pack()"! – aeoliant

+0

¿Sabes si esto también funciona para los botones? Es decir. si quiero algún tipo de Botón semitransparente en la parte superior de otra aplicación, donde el evento no se reenvía a la aplicación subyacente sino al botón para poder presionarlo? – Peter

+1

No veo que aparezcan los campos de texto. ¿Alguna idea de por qué eso puede ser? – clankill3r

Cuestiones relacionadas