0

PopupMenu(TrayIconを使用)でJPanelのようなグラフィックをレンダリングする方法はありますか?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." );
        }
    }
4

2 に答える 2

1

PopupMenuでJPanelのようなグラフィックをレンダリングする方法はありますか?JPopupMenuを使用することで可能であることはわかっていますが、ポップアップの外側をクリックしてもポップアップが閉じないのは好きではありません(また、PopupMenuのようにアイコンが強調表示されません)。

  • 私はポップアップコンテナに直接話します、カスタムペイントでJava-2D置くのに問題がないことを確認してください、で、によって置かれますJPanelJButtonsGridLayout

  • はい、いくつかの方法があります。@KirillGrouchnikovによる最高の説明です。

  • 作成するかどうかを決めることができます

    1)JPopupMenu/ JMenu、のそれぞれの新しいペイント

    2)に入れます(その後、現在UIManagerのすべてに有効です)ObjectsJVM

于 2012-12-20T10:52:36.427 に答える
0
You can extending JPopupMenu and add customItem to it:
public class CustomPopUp extends JPopupMenu {

    public CustomPopUp() {
        reload();
    }

    private void reload(final Collection<CustomItem> items) throws BadLocationException {
        for (final CustomItem item : items) {
            add(new AbstractAction(item.getLabel(), item.getIcon()) {               
                @Override
                public void actionPerformed(final ActionEvent e) {
                    //do whatever
                }
            });
        }

    }
}
public class CustomItem {
    private String label;
    private ImageIcon icon;

    //getter and setter
}
于 2012-12-20T11:22:35.970 に答える