JPanel внутри PopupMenu

Есть ли способ отображать графику, такую ​​​​как JPanel, в PopupMenu (с TrayIcon)? Я знаю, что это возможно с помощью JPopupMenu, но мне не нравится, что всплывающее окно не закрывается, если я щелкаю за его пределами (и значок не выделяется, как в случае с PopupMenu).

Пример того, что я пытаюсь сделать с JPopupMenu:

    if( SystemTray.isSupported() ) {
        // Get the SystemTray instance
        SystemTray tray = SystemTray.getSystemTray();

        // Load icon
        Image image = new ImageIcon(this.getClass().getResource("delete.png")).getImage();

        final JPopupMenu popup = new JPopupMenu();
        popup.add( new JMenuItem("Test") );

        JPanel p1 = new JPanel();
        p1.setBackground( Color.red );
        p1.setPreferredSize( new Dimension(200, 300) );
        popup.add( p1 );

        JTrayIcon trayIcon = new JTrayIcon( image );
        trayIcon.setJPopupMenu( popup );

        trayIcon.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                popup.setLocation(e.getX(), e.getY());
                popup.setInvoker(popup);
                popup.setVisible(true);
            }
        });

        try {
            tray.add( trayIcon );
        } catch (Exception e) {
            JOptionPane.showMessageDialog( null, "Could not add tray icon." );
        }
    }

person Niclas Larsson    schedule 20.12.2012    source источник


Ответы (1)


Есть ли способ отображать графику, такую ​​​​как JPanel, в PopupMenu? Я знаю, что это возможно с помощью JPopupMenu, но мне не нравится, что всплывающее окно не закрывается, если я щелкаю за его пределами (и значок не выделяется, как в случае с PopupMenu).

  • Я буду говорить только о Java-2D непосредственно во всплывающем контейнере, конечно, нет проблем поставить JPanel с пользовательской прорисовкой, с JButtons, наложенной GridLayout

  • Да, есть несколько способов, лучшее описание @Кирилл Гручников

  • вы можете решить, будете ли вы создавать

    1) новая краска для каждого из JPopupMenu/JMenu,

    2) поставить на UIManager (тогда действует для всех Objects в текущей JVM)

person mKorbel    schedule 20.12.2012
comment
Этот использует JMenuItem, и это не проблема при использовании JPopupMenu. Дело в том, что я хочу отобразить всплывающее окно из TrayIcon с графикой в ​​нем. - person Niclas Larsson; 20.12.2012
comment
Я говорю только о mousevents JPopup из SystemTrays Icon - person mKorbel; 20.12.2012