Adding a vertical separator in PopupMenu, in the task bar

后端 未结 2 2136
灰色年华
灰色年华 2021-02-15 22:57

How can I add a vertical separator in the pop up menu of the app in the task bar ?

   tray = SystemTray.getSystemTray();             
   openMenuItem = new MenuI         


        
2条回答
  •  灰色年华
    2021-02-15 23:51

    One easy trick is to add an empty icon to the JMenuItem. The look and feel then adds the vertical separator you are looking for (of course, this only works with the Windows L&F, other L&F may render this differently):

    Menu example result

    And the code that produced it:

    import java.awt.AWTException;
    import java.awt.SystemTray;
    import java.awt.TrayIcon;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    
    import javax.swing.ImageIcon;
    import javax.swing.JMenuItem;
    import javax.swing.JPopupMenu;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class TestTrayIcon {
    
        protected void initUI() {
    
            TrayIcon trayIcon = new TrayIcon(new ImageIcon(
                    "http://3.bp.blogspot.com/-nh7fv5FqpU4/TeUbTvAdSkI/AAAAAAAAAUo/Ig53KJGvzlk/s45/avatar.png").getImage());
    
            final JPopupMenu popupMenu = new JPopupMenu();
            JMenuItem checkBox1 = new JMenuItem("Last checked...", new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)));
            JMenuItem checkBox2 = new JMenuItem("Open...");
    
            popupMenu.add(checkBox1);
            popupMenu.addSeparator();
            popupMenu.add(checkBox2);
    
            trayIcon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseReleased(MouseEvent e) {
                    if (e.isPopupTrigger()) {
                        popupMenu.setLocation(e.getX(), e.getY());
                        popupMenu.setInvoker(popupMenu);
                        popupMenu.setVisible(true);
                    }
                }
            });
            try {
                SystemTray.getSystemTray().add(trayIcon);
            } catch (AWTException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InstantiationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (UnsupportedLookAndFeelException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    new TestTrayIcon().initUI();
                }
            });
        }
    
    }
    

提交回复
热议问题