본문 바로가기
프로그래밍/② JAVA(자바) 프로젝트

② JAVA(자바) 프로젝트-1 최소화시 시스템트레이에 보내기(숨기기) 및 화면내단축키 설정 == Send (hide) to the system tray when minimized and set onscreen shortcuts

by ronul 2017. 4. 21.
300x250

 


인스턴스를 생성, LookAndFeel을 세팅, 시스템 트레이 추가,  시스템트레이 아이콘생성,  popupMenu에 추가, 화면내 단축키 설정 ,  트레이시 open과 exit때 ,최대화일때, 원래크기일때 등이 구현되었습니다.
자세한 내용은 코드 중간중간 System.out.println 으로 설명이 되어있습니다.

코드입니다. 


 

 

 

 

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.AbstractAction;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JRootPane;

import javax.swing.KeyStroke;

import javax.swing.UIManager;


public class SystemTrayIn extends JFrame {

final String MY_FUNC_KEY = "key";

TrayIcon trayIcon;

SystemTray tray;


SystemTrayIn() {

super("시스템트레이 테스트");

System.out.println("인스턴스 생성");

try {

System.out.println("look and feel 세팅");

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {

System.out.println("look and feel 실패");

}

if (SystemTray.isSupported()) {

System.out.println("시스템트레이에 추가");

tray = SystemTray.getSystemTray();

Image image = Toolkit.getDefaultToolkit().getImage("c://penguine.png");

ActionListener exitListener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.out.println("끝내기");

System.exit(0);

}

};

final JRootPane ROOT_PANE = this.getRootPane();

ROOT_PANE.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)

.put(KeyStroke.getKeyStroke((char) KeyEvent.VK_U, InputEvent.CTRL_DOWN_MASK), MY_FUNC_KEY);

ROOT_PANE.getActionMap().put(MY_FUNC_KEY, new AbstractAction() {

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("되라");

}

});


PopupMenu popup = new PopupMenu();

MenuItem defaultItem = new MenuItem("Exit");

defaultItem.addActionListener(exitListener);

popup.add(defaultItem);

defaultItem = new MenuItem("Open");

defaultItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

setVisible(true);

setExtendedState(JFrame.NORMAL);

}

});

popup.add(defaultItem);

trayIcon = new TrayIcon(image, "SystemTray Demo", popup);

trayIcon.setImageAutoSize(true);

} else {

System.out.println("시스템트레이 접근 실패");

}


addWindowStateListener(new WindowStateListener() {

public void windowStateChanged(WindowEvent e) {

if (e.getNewState() == ICONIFIED) {

try {

tray.add(trayIcon);

setVisible(false);

System.out.println("시스템트레이에 들어감");

} catch (AWTException ex) {

System.out.println("시스템트레이 접근 실패");

}

}

if (e.getNewState() == 7) {

try {

tray.add(trayIcon);

setVisible(false);

System.out.println("시스템트레이에 들어감");

} catch (AWTException ex) {

System.out.println("시스템트레이 접근 실패");

}

}

if (e.getNewState() == MAXIMIZED_BOTH) {

tray.remove(trayIcon);

setVisible(true);

System.out.println("최대화");

}

if (e.getNewState() == NORMAL) {

tray.remove(trayIcon);

setVisible(true);

System.out.println("돌아오기");

}

}

});

setIconImage(Toolkit.getDefaultToolkit().getImage("penguin.png"));

setVisible(true);

setSize(300, 300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}


public static void main(String[] args) {

new SystemTrayIn();

}

}

 
300x250

댓글