Java: Durchklicken eines Fensters (einschließlich Text / Bildern)

Ich möchte ein Overlay in Java erstellen, das heißttransparent, immer obenund das kann ichDurchklicken. Ich habe welche gefundenähnlich Beiträge Über dieses Problem, aber selbst nachdem ich ihren Antworten gefolgt bin, habe ich ein Problem.

Mein Problem macht dasganzes Fenster Durchklicken. Ich habe kein Problem damit, dass es mit einem JFrame funktioniert, aber wenn ichFügen Sie alle Komponenten hinzu dazu (JLabel oder ein ImagePanel) dieKlickattribut überträgt nicht zu ihnen.

Da ich ein Hintergrundbild für meine Anwendung haben möchte, ist der Code, den ich habe, unbrauchbar, wenn ich auf den Bereich klicke, den Text / Bild abdeckt, um zu sehen, wie das Fenster fokussiert wird.

Bevor ich den Code zeige, den ich verwende, möchte ich zuerst darauf verweisendiese Fäden die im wesentlichen genau beschreibt, was ich will, außer in c #.

Mein Ziel ist es, ein Overlay mit einem transparenten PNG-Bild und zusätzlichem Text zu erstellen, das sich bei wichtigen Ereignissen ändert. Ob JFrame oder eine andere Bibliothek verwendet wird, spielt keine Rolle. Ich brauche es nur mit Windows kompatibel.

Ich möchte auch erwähnen, dass ich einige Erfahrungen mit Java habe, aber ein Anfänger in der Verwendung von JFrame bin.

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

import com.sun.jna.platform.WindowUtils;


public class Overlay {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Overlay Window");
        frame.setUndecorated(true);
        frame.setAlwaysOnTop(true);
        frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);
        frame.setLocation(400, 400);
        frame.getContentPane().setLayout(new java.awt.BorderLayout());

        JLabel textLabel = new JLabel("I'm a label in the window", SwingConstants.CENTER);
        frame.getContentPane().add(textLabel, BorderLayout.CENTER); 
        frame.pack();

        System.setProperty("sun.java2d.noddraw", "true");
        WindowUtils.setWindowTransparent(frame, true);
        WindowUtils.setWindowAlpha(frame, 1.0f);

        //Using AWTUtilities gives the same result as WindowUtils
        //AWTUtilities.setWindowOpaque(frame, false);
        //AWTUtilities.setWindowOpacity(frame, 1.0f);

        frame.setVisible(true);
    }
}

Beachten Sie, dass das Problem istNicht, dass das Fenster fokussiert wäre (obwohl das ein Ergebnis des Problems ist), aber über dieJLabel und ImagePanel werden nicht durchgeklickt.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage