Java/Tip & Tech2009. 9. 15. 13:17

작업표시줄에 프로그램을 추가하는 기능은 자바 6.0에서 새로 추가된 기능중 하나로

드디어 C나 VB등의 언어만의 전유물이던 작업표시줄에 자바로도 접근이 가능하게 된것.

뭐 사실 C개발자들이 들으면 코웃음을 날리겠지만

그렇지만 또 한편으로는 자바의 강력한 특징중 하나인 "Platform Independent"는 무시한체

윈도우의 작업표시줄에 프로그램을 추가하는 기능을 포함하는 것이 옮은 것인지 의문이 든다.

뭐 쓸데없이 서두가 좀 길어진 느낌인데 일단 테스트한 프로그램의 소스를 올려본다.


import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

public class TestSystemTrayIcon implements ActionListener {
	private SystemTray systemTray;
	private PopupMenu mPopup;
	private MenuItem mItemNew, mItemOpen, mItemSave, mItemExit;

	public TestSystemTrayIcon() {
		try {
			initSystemTrayIcon();
		} catch (AWTException awte) {
			System.out.println("##### Error occurred during create UI!!!");
			System.out.println(awte.toString());
			System.exit(0);
		}
	}

	public void initSystemTrayIcon() throws AWTException {
		if (SystemTray.isSupported()) {
			mPopup = new PopupMenu();
			mItemNew = new MenuItem("New");
			mItemOpen = new MenuItem("Open");
			mItemSave = new MenuItem("Save");
			mItemExit = new MenuItem("Exit");

			mItemNew.addActionListener(this);
			mItemOpen.addActionListener(this);
			mItemSave.addActionListener(this);
			mItemExit.addActionListener(this);

			mPopup.add(mItemNew);
			mPopup.addSeparator();
			mPopup.add(mItemOpen);
			mPopup.add(mItemSave);
			mPopup.addSeparator();
			mPopup.add(mItemExit);

			Image image = Toolkit.getDefaultToolkit().getImage("c:/icon_network.gif");
			TrayIcon trayIcon = new TrayIcon(image, "Java 6.0 SystemTrayIcon Test", mPopup);
			trayIcon.setImageAutoSize(true);

			systemTray = SystemTray.getSystemTray();
			systemTray.add(trayIcon);
		}
	}

	@Override
	public void actionPerformed(ActionEvent ae) {
		if (ae.getSource() == mItemNew) {
			showMessage("New File...", "새로운 파일을 생성합니다.");
		} else if (ae.getSource() == mItemOpen) {
			showMessage("File Open...", "파일을 엽니다.");
		} else if (ae.getSource() == mItemSave) {
			showMessage("File Save...", "파일을 저장합니다.");
		} else if (ae.getSource() == mItemExit) {
			showMessage("Exit SystemTrayIcon Test...", "종료하겠습니다.");
			System.exit(0);
		}
	}

	private void showMessage(String title, String message) {
		JOptionPane.showMessageDialog(null, message, title, JOptionPane.INFORMATION_MESSAGE);
	}

	public static void main(String[] args) {
		TestSystemTrayIcon test = new TestSystemTrayIcon();
	}
}


위 소스를 실행해보면 아래와 같이 결과가 나온다.

 
 
 
 << 아이콘 추가된 모습 >>  << 아이콘에서 우클릭 했을때 모습 >>  << "Exit" 메뉴를 클릭하면 뜨는 종류 메시지 >>


소스에 대해 상세하게 설명을 하는 것도 좀 그렇고 해서 메서드 별로 기능만 간략하게 정리해보면...

public TestSystemTrayIcon()   ==> 생성자. SystemTray 클래스를 초기화하는 메서드를 호출한다.
public void initSystemTrayIcon()    ==> SystemTray 클래스를 초기화하고 팝업메뉴 등을 셋팅한다.
public void actionPerformed(ActionEvent ae)   ==> 마우스 클릭등의 이벤트 발생시 처리를 기술한 메서드.
                                                                       ActionListener 인터페이스를 구현하면 반드시 오버라이딩 해야한다.
private void showMessage(String title, String message)   ==> JOptionPane 클래스로 메시지 창을 띄우기 위한 메서드.
public static void main(String[] args)   ==> 이 클래스를 실행하기 위한 main 메서드.        


사실 위 기능은 프로젝트에 한번 사용했다가 그닥 맘에 들지 않아서 제외시킨 기능이다.

필요하지 않은 기능을 한번 써보고 싶은 마음에 억지로 끼워 넣었던 것이 문제였었다.

나중에 기회가 오면 정말 제대로 한번 써보고 싶은 기능중 하나...

물론 고객사들이 아직 JDK 6.0의 설치를 거부하고 있긴 하지만...
Posted by Huikyun