Java :Щелчок по окну -–(, включая текст/изображения)

Я хочу создать наложение в Java, которое будет прозрачным , всегда сверху , и чтобы я мог щелкнуть -по . Я нашел несколько похожихсообщения об этой проблеме, но даже после их ответов у меня возникла одна проблема.

Моя проблема заключается в том, что все окно щелкает -. У меня нет проблем с тем, чтобы заставить его работать с JFrame, но как только я добавляю к нему какие-либо компоненты (JLabel или ImagePanel ), щелчок -через атрибут не не переносится на них.

Поскольку я хочу иметь фоновое изображение для своего приложения, это в основном делает код, который у меня есть, бесполезным, видя, как окно фокусируется всякий раз, когда я щелкаю область, которую покрывает текст/изображение.

Прежде чем я покажу код, который я использую, я хотел бы сначала сослаться на этиthreads , который по существу описывает именно то, что я хочу, за исключением C #.

Моя цель — создать оверлей с прозрачным изображением.png -и некоторым текстом сверху -, который будет меняться при ключевых событиях. Если он использует JFrame или любую другую библиотеку, не имеет значения. Мне нужна только совместимость с Windows.

Я также хотел бы упомянуть, что у меня есть некоторый опыт работы с Java, но я новичок в использовании JFrame.

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);
    }
}

Обратите внимание, что проблема не в том, что окно находится в фокусе (. хотя это результат проблемы ), но JLabel и ImagePanel не щелкают -через .

10
задан Community 23 May 2017 в 12:01
поделиться