2009-11-20 10 views
7

J'essaie de créer un affichage de style HUD pour une application étrangère.Comment créer une fenêtre de superposition en Java?

Pour ce faire, je devrais faire une fenêtre de recouvrement transparent, qui serait placé sur le dessus de la fenêtre de l'application étrangère. La fenêtre de superposition devrait me permettre de placer des widgets et de dessiner du texte dessus. Les événements doivent être transférés à la fenêtre sous-jacente, s'ils se produisent sur la zone transparente (et permettent aux widgets de fonctionner comme attendus). Je le fais sous OSX avec Java. J'espère pouvoir le faire avec Java pur avec la portabilité à d'autres plates-formes, mais si ce n'est pas possible, je serais bien avec des solutions qui permettraient simplement de faire cela sur OSX via Cocoa (Rococoa) ou Carbon.

+0

Avez-vous une capture d'écran d'une autre application? – OscarRyz

Répondre

17

En fait, j'ai été capable de comprendre cela moi-même. Semble être plus facile que prévu:

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

ne pas oublier de "frame.pack()"! – aeoliant

+0

Vous savez si cela fonctionne aussi pour les boutons? C'est à dire. si je ne veux pas une sorte de bouton semi-transparent au-dessus d'une autre application, où l'événement n'est pas transmis à l'application sous-jacente mais au bouton afin que je puisse l'appuyer? – Peter

+1

Je ne vois pas les champs de texte apparaissent. Une idée de pourquoi ça peut être? – clankill3r