私は、Growl に似た通知システムを作成するために、 Java の半透明で整形されたウィンドウを使用しました。基本的に、画面の右側に隠れている常に最前面に表示される非表示のウィンドウがあり、通知が入ってくるとそこに追加されます。これは希望どおりに機能します。
ただし、この非表示ウィンドウ (最大幅 400 ピクセル) の境界内にある別のアプリケーションのボタンをクリックしようとすると、クリック イベントがアプリケーションに送られます。何でもする。本当に混乱しました。他のアプリケーションがフリーズしたと思いました。
他のアプリケーションが自分のアプリケーションを「クリックスルー」できるようにする方法はありますか?
ここでは完全な SSCCE が必要だとは思いませんが、関連する可能性のあるコードの断片を次に示します。
// Set up frame: no border, etc. (undecorated); transparent.
frame.setUndecorated(true);
frame.setAlwaysOnTop(true);
frame.setResizable(false); // on Mac and maybe other platforms, even
// undecorated windows can be
// resized
AWTUtilities.setWindowOpaque(frame, false);
// Determine and set size and position.
// Height: maximized; width: maximized up to 400px.
Toolkit toolkit = Toolkit.getDefaultToolkit();
Insets insets = toolkit.getScreenInsets(frame
.getGraphicsConfiguration());
Dimension screenSize = toolkit.getScreenSize();
Dimension availableSpace = new Dimension(screenSize.width - insets.left
- insets.right, screenSize.height - insets.bottom - insets.top);
frame.setSize(new Dimension(
400 > availableSpace.width ? availableSpace.width : 400,
availableSpace.height));
frame.setLocation(screenSize.width - insets.right
- frame.getSize().width, insets.top);
// Set the content of the frame to the datum holder.
frame.setContentPane(client.createPanel());
ありがとう!