Saturday, March 17, 2007

Membuat System Tray Icon

Seperti yang telah kita ketahui, di jdk 6 terdapat 2 class baru untuk men support aplikasi desktop yang ingin memunculkan pesan atau icon pada System Tray. 2 class baru itu adalah SystemTray dan TrayIcon.Di sini saya akan menunjukkan contoh simple penggunaan kedua class tsb beserta penjelasannya.Ada 3 konstruktor pada class TrayIcon yg dapat digunakan yaitu :

  • TrayIcon(Image image)
    *Creates a TrayIcon with the specified image.
  • TrayIcon(Image image, String tooltip)
    *Creates a TrayIcon with the specified image and tooltip text.
  • TrayIcon(Image image, String tooltip, PopupMenu popup)
    *Creates a TrayIcon with the specified image, tooltip and popup menu.

Kita akan coba gunakan konstruktor yang ketiga, dimana kita akan membuat TrayIcon yang di dalamnya terdapat image/icon, tooltip, dan sebuah popup menu.Class yang akan kita buat bernama ContohSystray, class ini akan mempunyai 3 buah method, yaitu :

  • private static Image getImage() throws HeadlessException
    *method untuk menciptakan image/icon pada aplikasi dan akan dipanggil oleh kontruktor class TrayIcon pada parameter konstruktor yang pertama.
  • private static PopupMenu createPopupMenu() throws HeadlessException
    *Method untuk menciptakan sebuah popup menu dan akan dipanggil oleh kontruktor class TrayIcon pada parameter konstruktor yang ketiga.
  • public static void main(String[] args) throws Exception
    *Method utama untuk menjalankan aplikasi.

Code:
import java.awt.HeadlessException;

import java.awt.Image;

import java.awt.MenuItem;

import java.awt.Panel;

import java.awt.PopupMenu;

import java.awt.SystemTray;

import java.awt.TrayIcon;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import javax.swing.Icon;

import javax.swing.JOptionPane;

import javax.swing.plaf.metal.MetalIconFactory;

public class ContohSysTray {

private static Image getImage() throws HeadlessException {

Icon defaultIcon = MetalIconFactory.getTreeComputerIcon();

Image img = new BufferedImage(defaultIcon.getIconWidth(),

defaultIcon.getIconHeight(),

BufferedImage.TYPE_4BYTE_ABGR);

defaultIcon.paintIcon(new Panel(), img.getGraphics(), 0, 0);

return img;

}

private static PopupMenu createPopupMenu() throws

HeadlessException {

PopupMenu menu = new PopupMenu();

MenuItem exit = new MenuItem(”Exit”);

exit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

menu.add(exit);

return menu;

}

public static void main(String[] args) throws Exception {

TrayIcon icon = new TrayIcon(getImage(),

“Ini Tray Icon dari Java”, createPopupMenu());

icon.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null,

“Bring Java to the Desktop app”);

}

});

SystemTray.getSystemTray().add(icon);

while(true) {

Thread.sleep(10000);

icon.displayMessage(”Perhatian”, “Harap di click”,

TrayIcon.MessageType.WARNING);

}

}

}

Penjelasan method getImage :

Hal pertama yang kita perlukan adalah membuat object dari interface Icon, dalam program di atas object nya bernama defaultIcon yang dapat kita initialisasi dengan class MetalIconFactory. Class MetalIconFactory ini mempunyai banyak sekali method yang dapat kita pakai untuk menciptakan sebuah icon seperti getTreeComputerIcon, getTreeFloppyDriveIcon, getTreeHardDriveIcon dan masih banyak yang lainnya, Anda bisa melihat daftarnya di javadoc.Setelah itu barulah kita membuat object class Image yang kita beri nama img dengan nilainya mengimplementasikan class BufferedImage(int width, int height, int imageType).Method paintIcon(Component c, Graphics g, int x, int y) dipanggil oleh object defaultIcon untuk menampilkan icon pada posisi tertentu dalam sebuah Component, di sini kita menggunakan component Panel.


Penjelasan method createPopupMenu :

Di dalam TrayIcon pembuatan sebuah popup menu menurut saya adalah sebuah kewajiban, karena setidaknya ada menu di TrayIcon tsb untuk keluar dari aplikasi. Method createPopupMenu di atas berguna untuk memunculkan sebuah menu item dengan title Exit dan apabila menu item di klik oleh user maka program akan dihentikan.


Penjelasan method main/ utama:

Di dalam method utama ini adalah inti dari pembuatan TrayIcon, di dalamnya kita menciptakan sebuah object class TrayIcon bernama icon dengan memanfaatkan salah satu konstruktor dari class TrayIcon.Dengan mudahnya kita dapat memberikan event pada TrayIcon yang kita buat, contoh di sini menggunakan event ActionListener yang akan memunculkan sebuah message dialog apabila diklik oleh user.Harap diingat bahwa kita perlu memasukkan object class TrayIcon ke dalam class SystemTray dengan menggunakan method add(TrayIcon trayIcon)yang didahului method getSystemTray().Kita dapat menampilkan balon peringatan kepada user dengan memanfaatkan method displayMessage(String caption, String text, TrayIcon.MessageType messageType).Perulangan di atas hanya optional saja sifatnya. Method sleep dari class Thread digunakan untuk memberikan jangka waktu, pada detik ke berapa balon peringatan ditampilkan.Mudah-mudahan tutorial singkat ini dapat bermanfaat bagi programmer pemula di Java. Saya tunggu segala saran dan kritik atau pun pertanyaan yang berhubungan dengan tutorial Membuat System Tray Icon ini.
for more information click here http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/
By Uchiha Didik

No comments: