From Gossip@Openhome

Java Gossip: 啟動畫面與工具列圖示 - Java SE 6

有些視窗程式在啟動時,會有個啟動畫面,在Java SE 6之前,您要自己實作才可以擁有這個功能,現在您可以直接在使用"java"程式執行程式時下達"-splash"引數指定啟動畫面的圖片,就可以擁有這個功能,例如若執行 製作 Executable JAR 所製作出來的Executable Jar檔時,可以如下指定圖片:
java -splash:caterpillar.jpg -jar JNotePad.jar

其中caterpillar.jpg是啟動畫面的圖片,支援的圖片可以是JPG、GIF或PNG,GIF若有動畫效果則可以呈現出來。

您也可以在製作Executable JAR檔案時,於manifest檔案中指定"SplashScreen-Image"為啟動畫面的圖片,並在使用jar程式進行包裝時一併包裝圖片,如 此啟動JAR檔案時,就會自動展現啟動畫面,一個manifest檔案的寫法如下所示:

  • manifest.txt
Manifest-Version: 1.0
Main-Class: onlyfun.caterpillar.JNotePad
SplashScreen-Image: caterpillar.jpg

如果您對於啟動畫面更進一步的控制感興趣,例如在不同的啟動階段顯示不同的圖片,或者是在啟動圖片上顯示進度列,則可以看看java.awt. SplashScreen的API文件說明。

在Java SE 6中加入了系統工具列圖示的支援,您可以使用SystemTray類別的isSupported()方法,測試看看目前的系統是否支援系統工具列圖示,如 果支援的話,可以使用getSystemTray()取得SystemTray實例,使用add()方法加入TrayIcon實例,如此就可以加入一個系 統工具列圖示,例如:

  • SystemTrayDemo.java
package onlyfun.caterpillar;

import java.awt.*;

public class SystemTrayDemo {
public static void main(String[] args) {
if(SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit()
.getImage("musical_note_smile.gif");
TrayIcon trayIcon = new TrayIcon(image, "JNotePad 1.0");
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("無法加入系統工具列圖示");
e.printStackTrace();
}
} else {
System.err.println("無法取得系統工具列");
}
}
}

一個執行的結果畫面如下所示:
工具列圖示

如果想在系統工具列圖示上按右鍵時,可以出現蹦現視窗,則可以在建構TrayIcon實例時,指定一個PopupMenu實例給它,例如:

  • SystemTrayDemo2.java
package onlyfun.caterpillar;

import java.awt.*;
import javax.swing.*;

public class SystemTrayDemo2 {
public static void main(String[] args) {
if(SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit()
.getImage("musical_note_smile.gif");
PopupMenu popup = new PopupMenu();
MenuItem item = new MenuItem("開啟JNotePad 1.0");
popup.add(item);
TrayIcon trayIcon =
new TrayIcon(image, "JNotePad 1.0", popup);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("無法加入系統工具列圖示");
e.printStackTrace();
}
} else {
System.err.println("無法取得系統工具列");
}工具列圖示
}
}

執行以上程式,並在出現的圖示上按滑鼠右鍵,將會出現以下的畫面:
工具列圖示

如果打算在系統工具列圖示上主動顯示訊息,則可以使用TrayIcon的displayMessage()方法,例如:
trayIcon.displayMessage("哈囉", "該休息了嗎?",
                                TrayIcon.MessageType.WARNING);

TrayIcon可以顯示的MessageType包括有NONE、INFO、WARNING及ERROR,分別會顯示不同的圖示,上面這段程式片段執行結果畫面如下所示:
工具列圖示

如果要移除系統工具列中的圖示,則可以使用SystemTray實例的remove()方法,指定要移除的圖示,例如:
tray.remove(trayIcon);