2

私は、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());

ありがとう!

4

2 に答える 2

3

この問題は、Java7 - Mac 用の Oracle ディストリビューションで導入されたことに注意してください。Java6 の場合、Mac で問題なく動作します。また、すべての Windows プラットフォーム / Java バージョンでも問題なく動作します。

今後のリリースでこれを修正する可能性はありますか?

于 2012-10-18T09:55:49.633 に答える
2

ウィンドウが不透明/半透明だからといって、そこにないというわけではありません。したがって、ウィンドウはその境界内でクリックイベントをまだ受け取っています。

ウィンドウを使用しないときはウィンドウが表示されないように設定し、新しい通知が投稿されたときに表示されるように設定するには、次を使用します。

window_instance.setVisible(false);//hides window
window_instance.setVisible(true);//shows window

新しい通知が投稿された後、ウィンドウを短時間表示したままにしたい場合は、単にTimerandを使用し、 sメソッド内からTimerTask十分な を使用して、ウィンドウ インスタンスがまだ表示されていない場合は非表示に設定します。delayTimerTaskrun()

のヘルプについては、こちらも参照してくださいTimer: Timer および TimerTask クラスの使用

于 2012-08-17T19:43:08.700 に答える