透過的で、常に上部にあり、クリックスルーできるオーバーレイを Java で作成したいと考えています。この問題に関する同様 の投稿をいくつか見つけましたが、その回答に従った後でも、1 つの問題が発生しています。
私の問題は、ウィンドウ全体をクリックスルーにすることです。JFrame で動作させるのに問題はありませんが、コンポーネント(JLabel または ImagePanel) を追加すると、クリックスルー属性がそれらに引き継がれません。
アプリケーションの背景画像が必要なため、基本的に、テキスト/画像がカバーする領域をクリックするたびにウィンドウがどのようにフォーカスされるかを確認するコードが役に立たなくなります。
使用しているコードを示す前に、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 がクリックスルーされていないことに注意してください。