4

我有以下代码来创建带有 PopupMenu 的 TrayIcon :

public void addToTray()
{
    try 
    {
        try {
            //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception e) {
            e.printStackTrace();
        }

        PopupMenu popMenu= new PopupMenu();
        MenuItem exititem = new MenuItem("Exit");
        popMenu.add(exititem);

        BufferedImage trayImg = ImageIO.read(new File("Geqo.png"));
        ImageIcon ii = new ImageIcon(trayImg);
        TrayIcon trayIcon = new TrayIcon(ii.getImage(), "Geqo", popMenu);
        trayIcon.setImageAutoSize(true);
        SystemTray.getSystemTray().add(trayIcon);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

此代码旨在创建带有 PopupMenu 的 TrayIcon。这工作正常。但我不喜欢默认的 LAF(我认为是金属)。所以我尝试将 LAF 更改为 nimbus,以及 OS Default,Windows,但无济于事。LAF 似乎并没有改变。谁能指导我如何改变 LAF?提前致谢 :)!!

4

1 回答 1

3

Popup不是 Swing 组件(因此它不受 LookAndFeel 管理器的控制)。

Popup一个AWT组件,一般使用原生组件。

相反,您应该尝试更多类似...

public void addToTray()
{
    try 
    {
        try {
            //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception e) {
            e.printStackTrace();
        }

        BufferedImage trayImg = ImageIO.read(new File("Geqo.png"));
        ImageIcon ii = new ImageIcon(trayImg);
        final TrayIcon trayIcon = new TrayIcon(ii.getImage(), "Geqo", null);

        JPopupMenu jpopup = new JPopupMenu();
        JMenuItem miExit = new JMenuItem("Exit");
        jpopup.add(miExit);

        miExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                SystemTray.getSystemTray().remove(trayIcon);
                System.exit(0);
            }
        });

        trayIcon.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    jpopup.setLocation(e.getX(), e.getY());
                    jpopup.setInvoker(jpopup);
                    jpopup.setVisible(true);
                }
            }
        });

        trayIcon.setImageAutoSize(true);
        SystemTray.getSystemTray().add(trayIcon);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

这是基于使用JPopupMneuin 中建议的想法TrayIcon

…………

于 2013-06-23T07:56:04.257 回答