2017-12-15 3 views
0

Ich habe eine JFrame, die transparent ist immer oben und unfokussierbar, so dass ich es als Bildschirm-Overlay verwenden kann. Es funktioniert, aber das Problem ist: Wenn ich meinen Cursor irgendwo hinstelle, wo ich etwas gezeichnet habe, ist mein Cursor immer "über", so dass ich nicht in das Fenster klicken kann, das eigentlich im Fokus ist. Gibt es eine Möglichkeit, das zu beheben?Swing Screen Overlay störende Maus beim Zeichnen

public class ExternalOverlay extends JFrame implements ActionListener { 

    public Timer timer; 
    private float[] res; 
    private final int FRAMERATE = 60; 

    public ExternalOverlay() { 
     this.setUndecorated(true); 
     this.setBackground(new Color(0, 0, 0, 0)); 
     float[] res = this.getRes(); 
     this.setBounds(0, 0, (int)res[0], (int)res[1]); 
     this.setAlwaysOnTop(true); 
     this.getContentPane().setLayout(new java.awt.FlowLayout()); 
     this.setVisible(true); 
     this.setAutoRequestFocus(false); 
     this.setFocusableWindowState(false); 
     this.timer = new Timer(1000/FRAMERATE, this); 
     timer.start(); 
    } 

    private float[] getRes() { 
     if (this.res != null) return res; 
     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     double width = screenSize.getWidth(); 
     double height = screenSize.getHeight(); 
     return new float[] {(float) width, (float) height}; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     this.repaint(); 
    } 


    public void draw(Graphics g) { 

    } 

    @Override 
    public void paint(Graphics g) { 
    // draw 
    } 
} 

Antwort

0

Ich habe einen JFrame, die

transparent ist sollten Sie verwenden:

frame.setOpacity(0.0f); 

Lesen Sie den Abschnitt aus der Swing-Tutorial auf How to Create Translucent and Shaped Windows. Laden Sie den Code für einen guten Startplatz herunter.

+1

Ich hätte sagen sollen, dass es einen transparenten Hintergrund hat – Babbaj

+0

@Babbaj, Was ist ein transparenter Hintergrund? Sie sagen, der Rahmen ist immer überragend, so dass Sie ihn als Überlagerung verwenden können. Das sagt mir, dass der Rahmen über anderen Fenstern liegt, damit Sie andere Fenster auf dem Desktop sehen können. Wenn Sie versuchen, ein benutzerdefiniertes Bild zu erstellen, sollten Sie die paintComponent() -Methode eines JPanels überschreiben und dann das Bild dem Bild hinzufügen. Poste ein korrektes [mcve], das dein Problem demonstriert, da deine Frage nicht klar ist. – camickr

Verwandte Themen