在PopupMenu中将图标/图像添加到文本旁边作为menuItem的一部分

时间:2016-07-19 23:18:18

标签: java awt system-tray

我正在为我的系统托盘创建一个小程序,在该程序中它提供一些信息并在文本旁边的弹出菜单中显示一个图标。我试图使用JMenuItem添加一个图标,但我不能将它添加到PopupMenu。即使我使用menuItem也无法添加图标。

到目前为止,这是我的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//......


public class Interface 
{
    public static void mainInterface()
    {
        if(!SystemTray.isSupported())
        {
            System.out.println("System tray not supported! This program can only be used on Windows.");
            return ;
        }
        SystemTray systemTray = SystemTray.getSystemTray();
        Image image = Toolkit.getDefaultToolkit().getImage("src/icon.png");

        PopupMenu trayPopupMenu = new PopupMenu();

        MenuItem close = new MenuItem("Close");
        MenuItem CMItem = new MenuItem("test1", new ImageIcon("src/greenIcon.png"));
        MenuItem HerItem = new MenuItem("test2", new ImageIcon("src/greenIcon.png"));


        close.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                System.exit(0);             
            }
        });
        trayPopupMenu.add(close);
        trayPopupMenu.add(CMItem);
        trayPopupMenu.add(HerItem);
        TrayIcon trayIcon = new TrayIcon(image, "Status", trayPopupMenu);

        trayIcon.setImageAutoSize(true);

        try
        {
            systemTray.add(trayIcon);
        }catch(AWTException awtException)
        {
            awtException.printStackTrace();
        }
        System.out.println("end of main");
    }
}

由于menuItem对象中的图标部分,上述代码将无法运行。有人可以帮我把图标放在菜单中的文字旁边吗?

编辑:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The constructor MenuItem(String, ImageIcon) is undefined
    The constructor MenuItem(String, ImageIcon) is undefined

    at minecraft.status.checker.Interface.mainInterface(Interface.java:23)
    at minecraft.status.checker.MainClass.main(MainClass.java:12)

1 个答案:

答案 0 :(得分:0)

根据MenuItem here的文档,MenuItem没有可以带图标的构造函数(这也是您的堆栈跟踪所说的),它也不支持任何添加任何图标的方法。简而言之,MenuItem无法获取图标。

您提到尝试使用javax.swing&#39; JMenuItem,但正如您所发现的,JMenuItem需要JPopupMenuTrayIcon不支持JTrayIcon {1}}。因为Swing没有TrayIcon或其他类似的 public void Test8(List<int> items, int places) { int nums; for (int i = 0; i < places; i++) { nums = items[items.Count() - 1]; items.RemoveAt(items.Count - 1); items.Insert(0, nums); } } 对应物,所以我不相信它可以做你正在尝试的事情。< / p>