Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

데스크탑에서 돌아가는 소프트웨어를 만들다 보면 시스템 트레이에 등록해야 하는 경우가 생깁니다. Java 의 경우, JDK 1.6 이전에서는 별도의 라이브러리를 사용해야 했으나, 1.6 부터는 기본적으로 SystemTray 라는 클래스를 지원하고 있습니다. 따라서 매우 간편하게 시스템 트레이를 사용할 수 있습니다.

오늘의 이야기는 바로 시스템 트레이에 아이콘을 등록하고, 메뉴 작동에 대한 부분입니다.  JFrame 에 JTextArea 와 JButton 을 설치하고 오른쪽 위의 "X" 버튼을 누르면 창이 사라지면서 시스템 트레이에 트레이 아이콘을 등록합니다. 트레이 아이콘은 "restore" 와 "exit" 라는 메뉴를 가지며 각각 창을 다시 보여주는 기능과 종료하는 기능을 수행합니다. 먼저 오늘 만들게 될 프로그램의 모습입니다.

사용자 삽입 이미지

보시는 바와 같이 매우 간단합니다.  Layout 은 BorderLayout 을 썼고, JTextArea 를 BorderLayout.CENTER 로 JButton 을 BorderLayout.SOUTH 로 설정하였습니다. Exit 버튼을 누르면 프로그램이 종료하며, 우측 상단의 'X' 를 누르면 창이 닫히면서 트레이 아이콘이 등록됩니다.

사용자 삽입 이미지

시스템 트레이에 등록된 모습입니다. 녹색 바탕에 흰색으로 1이라는 숫자가 있는 아이콘이 트레이 아이콘이며, 풍선도움말에 "System Tray Test"라는 문구가 나옵니다.

사용자 삽입 이미지
아이콘을 오른쪽 클릭하였을 때 나오는 팝업 메뉴입니다. Restore 와 Exit 가 보입니다.

시스템 트레이에 아이콘을 등록하기 위해서는 TrayIcon 과 여기서 작동될 팝업메뉴가 필요하고 이를 SystemTray 를 이용해서 등록해주면 됩니다.

먼저 팝업 메뉴를 만드는 코드입니다. 팝업 메뉴를 만들고 여기에 ActionListener 를 만들수 있는 방법은 매우 다양하지만 저는 간단히 아래와 같이 했습니다.


        // 메뉴 만들기
        PopupMenu popup = new PopupMenu();
        MenuItem mi1 = new MenuItem("Restore");
        mi1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                restore();
            }
        });
        popup.add(mi1);
        MenuItem mi2 = new MenuItem("Exit");
        mi2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                exit();
            }
        });
        popup.add(mi2);
  

다음은 TrayIcon 을 만드는 과정입니다.

사용자 삽입 이미지
시스템 트레이에 등록될 아이콘입니다.

        // TrayIcon 만들기
        BufferedImage bi = null;
        try{           
            bi = ImageIO.read(new File("res/o1.gif"));               
        }catch(Exception e)
        {
            e.printStackTrace();
        }   
       
        if( bi != null)    trayIcon = new TrayIcon(bi,"System Tray Test", popup);

이미지를 얻기 위해 ImageIO를 사용했습니다. 다른 예외 처리가 필요할 수도 있지만 여기서는 단순하게 ^^

그리고 마지막으로 시스템 트레이에 TrayIcon을 등록하는 과정입니다.


 
       if( SystemTray.isSupported() && trayIcon != null){       
           
            SystemTray tray = SystemTray.getSystemTray();
            try{
                tray.add(trayIcon);
            }catch(Exception e){
                e.printStackTrace();
            }
        }

시스템 트레이에서 아이콘을 제거하기 위해서는 remove 메소드를 사용하면 됩니다.

전체 소스 파일의 내용을 보시려면 아래 버튼을 눌러주세요

전체 소스



SystemTray 는 1.6 이상에서만 동작하니, 최신 J2SE SDK 를 받아서 사용하시기 바랍니다.





0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/174 관련글 쓰기

댓글을 달아 주세요

1  ... 148 149 150 151 152 153 154 155 156  ... 264 
다...... (264)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (7)
끄적임 (66)
즐거운 과학 나라 (7)
일본 (5)
Study (4)