MacとJavaと映画と


最近のエントリー
BBQ


最近のレスポンス
ありがとうございました
参考にしてくださってありがとうございます...

ありがとうございました
ディスク拡張で検索して、ここへたどり着き...

Re: BEA JRockit 無償版 静かに消される?
まぁ、6月からスウェーデンは BEA じゃないからな。来週位に Oracle のサイトを探してみそ。

Google Maps for WordPressのIE表示、対策できました!
先日より記事にしていました、プラグイン『...

Re: JConsole で JBoss の MBean を監視
細かい調整面倒なので2カラムにして対応し...

Re: JConsole で JBoss の MBean を監視
IE! そんなブラウザもありましたね! ありがとうございます。確認してみまーす

Re: JConsole で JBoss の MBean を監視
日記の内容と関連してなくてアレだけど、磯...

Google Maps for WordPressのIE表示対策の参考にできるかも
侍ズム | Samuraism - Google Maps 簡単貼り付け 先日、『Google Maps for WordPress 試してみました が…』の記事で紹介した 侍ズム の記事にトラックバックをさせていただいた...

[Java]BEA JRockitが単体ダウンロード不可に
参照サイト 侍ズム | Samuraism - Oracle、BEA 買収後早くもクローズド戦略に? - BEA JRockit 単体ダウンロード不可 JRockitが・・・・ - maachangの日記 いちおう最新バージョンはまだ手に入るみた...

Google Maps for WordPress 試してみました が…
ブログに地図が貼れると良いなぁ…と思って いろいろとプラグインをあさってみています...
7月 2006
       1 
 2  3  4  5  6  7  8 
 9  10  11  12  13  14  15 
 16  17  18  19  20  21  22 
 23  24  25  26  27  28  29 
 30  31      
6  |  今日  |  8





はてなブックマーク数

あわせて読みたい


follow yusukey at http://twitter.com


Java 6.0 - Mustang では Windows のタスクトレイ制御をサポートするクラスが追加されているらしい。
わんこ日記 - What's cool in AWT on Java SE 6 (Mustang)

API はこちら。
Class SystemTray

先日 PowerPC 向けにも Java 6.0 の Developer Preview が出たので Mac OS X でサポートされるのか確認してみた。
サンプルコードは API リファレンスに載っているので簡単。
できる限りシンプルに書いてみたコードはこんな感じ。

public class SystemTrayTest {
public static void main(String[] args) throws Exception {
java.awt.SystemTray tray = java.awt.SystemTray.getSystemTray();
if(tray.isSupported()){
java.awt.TrayIcon trayIcon = new java.awt.TrayIcon(new javax.swing.ImageIcon(SystemTrayTest.class.getResource("images/samurai64.gif")).getImage());
java.awt.PopupMenu popup = new java.awt.PopupMenu();
popup.add("menu1");
popup.add("menu2");
trayIcon.setPopupMenu(popup);
tray.add(trayIcon);
Thread.sleep(100000);
}
}
}



試してみたらちゃんとサポートされているみたい。Dockに表示されるかと思ったけどメニューバーに表示された。

メニューバーに表示されたアイコン。

アイコンが大きすぎてはみ出してしまったけど、
Icon#setImageAutoSize(true);
でフィットしてくれるみたい。
public class SystemTrayTest {
public static void main(String[] args) throws Exception {
java.awt.SystemTray tray = java.awt.SystemTray.getSystemTray();
if(tray.isSupported()){
java.awt.TrayIcon trayIcon = new java.awt.TrayIcon(new javax.swing.ImageIcon(SystemTrayTest.class.getResource("images/samurai64.gif")).getImage());
trayIcon.setImageAutoSize(true);
java.awt.PopupMenu popup = new java.awt.PopupMenu();
popup.add("menu1");
popup.add("menu2");
trayIcon.setPopupMenu(popup);
tray.add(trayIcon);
Thread.sleep(100000);
}
}
}


ちゃんと収まったアイコン。

Windows だとカラフルなアイコンがタスクトレイに並ぶのが当たり前だけど、Mac OS X で違和感なく納めるにはモノクロのアイコンを用意しておいた方がよさそう。
Mac かどうかの判定はこんな感じ。
  public final static boolean mac = -1 != System.getProperty("os.name").toLowerCase().indexOf("mac");
public static boolean isMac(){
return mac;
}


SystemTray.isSupported() で仮想マシンがシステムトレイをサポートしているか調べることが出来ますが、Java6.0 以前では isSupported() メソッドを呼び出す前に NoClassDefFoundError が発生してしまいます。
Java 6.0 以前でも動作させる可能性のあるプログラムでは NoClassDefFoundError を防ぐため、SystemTray クラスが存在するか確認してから、SystemTray クラスを操作するクラスを呼び出すような工夫が必要です。
こんな感じ↓
public class SystemTrayTest1 {
public static void main(String args[])throws Exception{
try {
Class.forName("java.awt.SystemTray");
SystemTrayTest.main(args);
} catch (ClassNotFoundException ex) {
// do nothing
}
}
}

タグ : ,



コメント追加

タイトル
本文
HTML : b, i, blockquote, br, p, pre, a href="", ul, ol, li
名前
E-mail
Webサイト
保存しますか? はい  いいえ 

E-mailは公開されません, このエントリーの新規コメント通知が必要なら記入します。(解除可能)

トラックバックURL http://yusuke.homeip.net/diary/.action?entry=1153581342409