Добавьте значок / изображение рядом с текстом как часть элемента меню в PopupMenu
Я создаю небольшую программу для моего системного трея, в которой она дает некоторую информацию и отображает значок во всплывающем меню рядом с текстом. Я пытался добавить значок с помощью JMenuItem, но затем я не могу добавить его PopupMenu. Также, если я использую пункт меню, я не могу добавить значок.
Вот мой код до сих пор:
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 ответ
Согласно документации MenuItem
здесь, MenuItem
не имеет конструктора, который может принимать значок (это то, что говорит и ваша трассировка стека), а также не поддерживает никаких методов для добавления каких-либо иконок. Короче, MenuItem
не могу взять иконку.
Вы упомянули, что пытались использовать javax.swing JMenuItem
но, как вы обнаружили, JMenuItem
потребует JPopupMenu
, который не поддерживается TrayIcon
, Потому что нет JTrayIcon
или другой аналог TrayIcon
для Swing, я не верю, что возможно сделать то, что вы пытаетесь.