Ich würde gerne ein Overlay haben, auf das ich Text darstellen lassen kann. D.h. egal welches Programm offen ist ( Bei den meisten geht es nur wenn das Programm mindestens im Vollbildfenster-Modus ist), ich möchte auf dem Bildschirm Text darstellen lassen. Ich habe das so realisiert, wie in der Overlay Klasse. Jetzt kann ich dem Frame Labels hinzufügen und Text darstellen lassen.
Problem1: Ich muss mehrfals auf das Taskbar Icon klicken, damit sich das Fenster auch wirklich nach vorne “schiebt”, meistens sogar mehrfach. ( Vllt muss das JFrame maximiert starten )
Problem2: Ich möchte das Overlay ein und ausblenden können, aber wenn das Frame invisible ist, kann es natürlich keinen Focus mehr erlangen also habe ich sowas gefunden. Aber das funktioniert auch nichtmehr sobald das JFrame einmal invisible ist. ( Er erkennt keine KeyEvents mehr ) Mit dem new Overlay(), geht es aber dann erstellt er immer ein leeres Fenster, was sich besonders in der TaskListe zeigt und sehr unsauber ist meiner Meinung nach.
EDIT: Lösung zu Problem 2 ( Adding “Global” KeyListener - Blogs - Java Programming Forum - Learn Java Programming )
Vielen Dank für eure Hilfe !
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_NUMPAD0 && e.getID() == KeyEvent.KEY_PRESSED) {
if (overlay.isVisible()) {
System.out.println("Y");
overlay.setVisible(false);
// new Overlay();
} else {
System.out.println("X");
overlay.setVisible(true);
}
}
return false;
}
});
}```
```package visual;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class Overlay extends JFrame {
// https://github.com/The-Nutty/CSGo-In-game-Bomb-Timer/blob/master/src/com/tomhazell/csgo/ingametimer/Overlay.java
/**
*
*/
private static final long serialVersionUID = 1L;
public Overlay() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Double width = screenSize.getWidth();
Double height = screenSize.getHeight();
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setUndecorated(true);
this.setBackground(new Color(0, 0, 0, 0));
this.setSize(width.intValue(), height.intValue());
this.setPreferredSize(new Dimension(width.intValue(), height.intValue()));
this.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);
this.setLayout(null);
this.setAlwaysOnTop(true);
this.setVisible(true);
}
}