java - 在 Java 中创建 NSStatusItem/Menubar 应用程序

标签 java macos statusbar menubar

我试图在 Java 中模拟 Objective C 的 NSStatusItem 功能。也就是说,我正在尝试编写一个 Java 应用程序,它将位于 Mac 的菜单栏中,like this . Here's a link到 Apple 关于 StatusBar 的文档。

有什么方法可以在 Java 中做到这一点?

最佳答案

使用java.awt.SystemTray .我已经确认它适用于 OS X Lion。根据this question ,也可以使用 SWT。

例子:

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 java.net.MalformedURLException;
import java.net.URL;

public class MenuBarIconTest {
    public static void main(String[] args) throws MalformedURLException {
        TrayIcon trayIcon = null;
         if (SystemTray.isSupported()) {
             // get the SystemTray instance
             SystemTray tray = SystemTray.getSystemTray();
             // load an image
             Image image = Toolkit.getDefaultToolkit().getImage(new URL("http://cdn1.iconfinder.com/data/icons/Hypic_Icon_Pack_by_shlyapnikova/16/forum_16.png"));
             // create a action listener to listen for default action executed on the tray icon
             ActionListener listener = new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                     System.out.println("action");
                     // execute default action of the application
                     // ...
                 }
             };
             // create a popup menu
             PopupMenu popup = new PopupMenu();
             // create menu item for the default action
             MenuItem defaultItem = new MenuItem("Do the action");
             defaultItem.addActionListener(listener);
             popup.add(defaultItem);
             /// ... add other items
             // construct a TrayIcon
             trayIcon = new TrayIcon(image, "Tray Demo", popup);
             // set the TrayIcon properties
             trayIcon.addActionListener(listener);
             // ...
             // add the tray image
             try {
                 tray.add(trayIcon);
             } catch (AWTException e) {
                 System.err.println(e);
             }
             // ...
         } else {
             // disable tray option in your application or
             // perform other actions
             //...
         }
         // ...
         // some time later
         // the application state has changed - update the image
         if (trayIcon != null) {
             //trayIcon.setImage(updatedImage);
         }

    }
}

关于java - 在 Java 中创建 NSStatusItem/Menubar 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13481504/

相关文章:

macos - 使用 C++11 在 g++ 中编译库

MacOS 需要不同的操作系统版本与 Info.plist

android - 无法使用 Firebase ICON android 更改我的通知

java - 无法在 Mac OS Yosemite 上安装 JDK 8u25

java - 搜索表达式返回四个空元素

ruby - irb 中的单词边界

Qt 无法加载临时状态消息

java - 如何让 wsimport 生成构造函数?

java - 从 map 中调用对象并直接转换

ios - 在 iOS 7 中暂时隐藏状态栏