私は Java Swing アプリケーションを作成しました。これは、Windows と Mac OS X で実行する必要があります。
ユーザーが最小化ボタンをクリックすると、アプリケーションが最小化され、次のコードでシステム トレイにアイコンが作成されます。
MainScreen.getInstance().setExtendedState(JFrame.ICONIFIED);
trayIcon = new TrayIcon(new ImageIcon(getClass().getResource(
"/dragonstore/resources/icon.png")).getImage());
trayIcon.setToolTip("DragonStore");
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
MainScreen.getInstance().setVisible(true);
MainScreen.getInstance().setExtendedState(NORMAL);
SystemTray.getSystemTray().remove(trayIcon);
trayIcon=null;
MainScreen.getInstance().toFront();
MainScreen.getInstance().getMainPanel().revalidate();
MainScreen.getInstance().getMainPanel().repaint();
MainScreen.getInstance().pack();
MainScreen.getInstance().validate();
MainScreen.getInstance().repaint();
System.out.println("Restore");
}
});
SystemTray.getSystemTray().add(trayIcon);
trayIcon.displayMessage("DragonStore",
"Click here to maximized window again",TrayIcon.MessageType.INFO);
setVisible(false);
したがって、上記のコードは正常に実行され、ユーザーがシステム トレイ アイコンをクリックすると、trayIcon
Mouse Clicked 関数のコードによってアプリケーションが復元されます。
Windows ではすべて問題なく動作し、どこにも問題はありません。
しかし、Mac OS X でアプリケーションを復元すると、すべてのコンポーネントが Mac のデフォルトであるアニメーション スタイルで表示されますが、画面に完全に復元されると、フレームにコンポーネントがないかのようにウィンドウに空白のウィンドウが表示されます。
この問題を調べたところ、Mac OS X Lion でフレームの再描画のバグが見つかりましたが、ここでの問題ではないと思います。
これを解決するにはどうすればよいですか?
私の目的は、最小化されたアプリケーションをタスク バーから非表示にし、アイコンをシステム トレイ通知に表示して、ユーザーがシステム トレイ アイコンをクリックしてアプリケーションを復元できるようにすることです。
Windows と Mac の両方で実行する必要があります。
ありがとう