2009-11-20 13 views
7

Sto provando a creare un display in stile HUD per un'applicazione esterna.Come creare una finestra di sovrapposizione in Java?

Per fare ciò, avrei bisogno di creare una finestra di sovrapposizione trasparente, che sarebbe posizionata in cima alla finestra dell'applicazione esterna . La finestra di sovrapposizione dovrebbe consentire di posizionare i widget e disegnare il testo su di esso. Gli eventi dovrebbero essere inoltrati alla finestra sottostante, se si verificano nell'area trasparente (e consentire in altro modo ai widget di funzionare come previsto ).

Lo sto facendo su OSX con Java. Spero di farlo con Java puro con portabilità su altre piattaforme , ma se non fosse possibile, sarei a posto con soluzioni che permetterebbero semplicemente a di farlo su OSX tramite Cocoa (Rococoa) o Carbon.

+0

Ti capita di avere uno screenshot da un'altra app? – OscarRyz

risposta

17

In realtà, è stato in grado di capirlo da solo. Sembra essere più facile di quanto mi aspettassi:

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

non dimenticare di "frame.pack()"! – aeoliant

+0

Sai se questo funziona anche per i pulsanti? Cioè se non avessi una sorta di pulsante semitrasparente su un'altra applicazione, in cui l'evento non viene inoltrato all'applicazione sottostante ma al pulsante in modo da poterlo premere? – Peter

+1

Non vedo apparire i campi di testo. Qualche idea del perché possa essere? – clankill3r

Problemi correlati