티스토리 뷰
들어가며
- JavaFX의 Tray Icon에 메뉴를 추가하는 방법에 대해서 알아보도록 하겠습니다.
Tray Menu
- Tray Icon에 추가하는 메뉴는 아래와 같은 형태로 Tray Icon에 오른쪽 마우스 클릭을 했을 때 전시되는 메뉴를 말합니다.
* Tray Icon 추가 방법은 이 글을 참고 해주세요.
Tray Menu 구현
- 코드 구성은 아래와 같습니다.
TrayMenu.java
public class TrayMenu extends Frame {
private final transient Stage primaryStage;
private final transient TrayIcon trayIcon;
public TrayMenu(Stage stage, TrayIcon trayIcon) {
primaryStage = stage;
this.trayIcon = trayIcon;
primaryStage.setAlwaysOnTop(true);
}
public void addAppToTray() {
try {
if (!SystemTray.isSupported()) {
System.out.println("Failed to display tray icon - no system tray support");
return;
}
Toolkit.getDefaultToolkit();
final SystemTray systemTray = SystemTray.getSystemTray();
// Tray icon popup의 "About"의 이벤트 설정
final MenuItem aboutItem = new MenuItem("About");
aboutItem.addActionListener(e -> System.out.println("Clicked about menu."));
// Tray icon popup의 "Exit"의 이벤트 설정
final MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(e -> {
System.out.println("Clicked exit menu");
handleTerminate();
});
final String systemName = "Tray Menu";
final PopupMenu popup = new PopupMenu(systemName);
popup.add(aboutItem);
popup.addSeparator();
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
trayIcon.setToolTip(systemName);
systemTray.add(trayIcon);
} catch (AWTException e) {
System.out.println("Failed to display tray icon");
}
}
private void handleTerminate() {
Platform.runLater(() -> {
primaryStage.fireEvent(new WindowEvent(primaryStage, WindowEvent.WINDOW_CLOSE_REQUEST));
SystemTray.getSystemTray().remove(trayIcon);
System.exit(0);
});
}
}
- PopupMenu 인스턴스에 원하는 메뉴를 추가합니다. (메뉴 클릭 이벤트도 등록)
- System Tray(ex. 윈도우에서의 '작업 표시줄')를 OS로 부터 가져와 PopupMenu를 등록해주는 방식입니다.
tray_icon.png
- Tray Icon을 만들었을 때 사용한 이미지를 그대로 사용하겠습니다. (16px X 16px)
TrayMenuLauncher.java
public class TrayMenuLauncher extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
final InputStream resource = this.getClass().getResourceAsStream("/icons/tray_icon.png");
TrayIcon trayIcon = new TrayIcon(ImageIO.read(resource));
TrayMenu trayMenu = new TrayMenu(primaryStage, trayIcon);
trayMenu.addAppToTray();
}
}
결과화면
- 아래와 같이 Tray Icon 우클릭시에 Tray Menu가 전시되는 것을 볼수 있습니다.
끝으로
이 글이 도움이 되었다면, Google 광고 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > JavaFX' 카테고리의 다른 글
(JavaFX) FXML 작성 시 "<fx:root>" 를 사용하는 이유 (0) | 2020.02.27 |
---|---|
(JavaFX) JavaFX 애니메이션 사용법 (0) | 2020.02.01 |
[JavaFx] Tray Icon 전시 방법 (0) | 2019.11.16 |
[JavaFX] TableView Cell에 버튼(Control) 추가하기 (2) | 2019.10.17 |
[JavaFX] System Clipboard에 Text 복사 (Ctrl + c 시에 내용 복사하기) (0) | 2019.02.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 배낭 여행
- 자전거
- effective java
- java
- 일본 배낭여행
- 이펙티브자바
- 텐트
- springboot
- 인텔리제이
- 이펙티브 자바
- windows
- 일본여행
- intelij
- JavaFX 종료
- effectivejava
- 일본 여행
- Java UI
- 이펙티브
- 자바
- 방통대 과제물
- 일본 자전거 여행
- JavaFX Window Close
- git
- JavaFX
- JavaFX Table View
- JavaFX 테이블뷰
- 자전거 여행
- 배낭여행
- 스프링부트
- TableView
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함