Я хочу создать наложение в Java, которое прозрачно, всегда сверху, и что я могу кликать по. Я нашел несколько похожих сообщений об этой проблеме, но даже после их ответов я один вопрос.
Моя проблема заключается в создании всего окна. У меня нет проблем с его работой с JFrame, но как только я добавлю к нему какие-либо компоненты (JLabel или ImagePanel), атрибут click-through не переносится.
Как я хочу иметь фоновое изображение для моего приложения, это в основном делает код, который мне бесполезен, видя, как окно становится сфокусированным всякий раз, когда я нажимаю область, на которую распространяется текст/изображение.
Прежде чем я покажу код, который я использую, я хотел бы сначала обратиться к этим темам который по существу описывает именно то, что я хочу, кроме С#.
Моя цель - создать наложение с прозрачным .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, не являющихся кликом.