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
}
}
Ich hätte sagen sollen, dass es einen transparenten Hintergrund hat – Babbaj
@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