JavaFx Stage 托盘
JavaFx是Java语言编写的一个用于创建富客户端应用程序的开发工具包。它提供了丰富的图形界面组件和功能,使开发者能够轻松创建具有现代感的桌面应用程序。
在JavaFx中,Stage是顶层容器,表示一个窗口。一般情况下,我们通过Stage来展示应用程序的主界面。然而,有时候我们希望将应用程序最小化到系统托盘中,以便用户可以方便地打开或关闭应用程序。
本文将介绍如何使用JavaFx创建一个具有系统托盘功能的应用程序,并提供代码示例。
1. 导入依赖库
首先,我们需要在项目中导入JavaFx的依赖库。在Maven项目中,可以在pom.xml
文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
</dependency>
</dependencies>
2. 创建主界面
接下来,我们需要创建应用程序的主界面。这里我们创建一个简单的窗口,并添加一个按钮和一个标签:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 创建按钮和标签
Button button = new Button("最小化到托盘");
Label label = new Label("Hello, JavaFx!");
// 创建布局并添加组件
VBox root = new VBox();
root.getChildren().addAll(button, label);
// 创建场景
Scene scene = new Scene(root, 300, 200);
// 设置舞台
primaryStage.setTitle("JavaFx Stage 托盘示例");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
3. 创建托盘图标
现在,我们需要创建系统托盘图标,并为其添加事件。JavaFx提供了SystemTray
和TrayIcon
两个类来实现这个功能。
import javafx.application.Platform;
import javafx.stage.Stage;
import java.awt.*;
import java.awt.TrayIcon.MessageType;
public class TrayIconManager {
private static TrayIcon trayIcon;
public static void addTrayIcon(Stage primaryStage) {
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
// 创建点击事件
ActionListener actionListener = e -> {
Platform.runLater(() -> {
primaryStage.show();
tray.remove(trayIcon);
});
};
// 创建退出事件
ActionListener exitListener = e -> {
Platform.exit();
tray.remove(trayIcon);
};
// 创建托盘图标
Image image = Toolkit.getDefaultToolkit().getImage("icon.png");
PopupMenu popupMenu = new PopupMenu();
MenuItem showItem = new MenuItem("显示");
MenuItem exitItem = new MenuItem("退出");
showItem.addActionListener(actionListener);
exitItem.addActionListener(exitListener);
popupMenu.add(showItem);
popupMenu.add(exitItem);
trayIcon = new TrayIcon(image, "JavaFx Stage 托盘示例", popupMenu);
trayIcon.setImageAutoSize(true);
// 添加双击事件
trayIcon.addActionListener(actionListener);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("托盘图标添加失败");
}
}
}
}
4. 最小化到托盘
最后,我们将按钮的点击事件修改为最小化到托盘,并添加一个方法来调用托盘图标的添加方法:
import javafx.application.Platform;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
private Stage primaryStage;
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
// 创建按钮和标签
Button button = new Button("最小化到托盘");
button.setOnAction(e -> minimizeToTray());
Label label = new Label("Hello, JavaFx!");
// 创建布局并添加组件
VBox root = new VBox();
root.getChildren().addAll(button, label);
// 创建场景