怎么设置JMenuItem菜单项的背景图片 ?

解决方案 »

  1.   

    试试:添加Action,在Action里设置SetIcon(Icon)
      

  2.   

    SetIcon 是设置图标。
    我不是问设置图标,而是设置整个菜单条的背景图。
    ?
      

  3.   

    You can creat your own render.
    What confused me is why you must set a background image?
      

  4.   

    笨蛋!Java界面定义不要在代码中些,全都放在XML中,用java中的Synth技术,功能很强大的。
      

  5.   

    to: frenchletter(逆风放屁)I want to make it looks very beautiful.
      

  6.   

    据说下边的代码可以使菜单项透明:JMenu menu = new JMenu("File");
    JMenuItem item = new JMenuItem("Open");
    item.setOpaque(false);
    JPopupMenu popup = menu.getPopupMenu();
    popup.setOpaque(false);
    // the following line must be executed only when
    // the poup menu is shown
    popup.getParent().setOpaque(false);参考
    http://jroller.com/page/gfx/?anchor=translucent_menus所以我猜想:
    在 popup.getParent() 里边可以画个背景出来。
    仅仅是个人猜想。
    期待高手。
      

  7.   

    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Insets;
    import java.awt.image.BufferedImage;import javax.imageio.ImageIO;
    import javax.swing.*;
    import javax.swing.plaf.MenuItemUI;
    import javax.swing.plaf.basic.BasicPopupMenuUI;public class BackgroundImgMenu extends JMenu
    {
    private Image bgImg; public BackgroundImgMenu(String text, Image bgImg)
    {
    super(text);
    this.bgImg = bgImg;
    }

    @Override
    public void updateUI()
    {
        setUI((MenuItemUI)UIManager.getUI(this));    if (getPopupMenu() != null )
        {
         getPopupMenu().setUI(new PopupMenuUI());
        }
    } @Override
    public JMenuItem add(JMenuItem menuItem)
    {
    menuItem.setOpaque(false);
    return super.add(menuItem);
    }

    private class PopupMenuUI extends BasicPopupMenuUI
    {
    @Override
    public void paint(Graphics g, JComponent c)
    {
    super.paint(g, c);
    Insets insets = c.getInsets();

    g.drawImage(bgImg, insets.left, insets.top, 
    c.getWidth() - insets.left - insets.right,
    c.getHeight() - insets.top - insets.bottom, c);
    }
    }

    public static void main(String[] args) throws Exception
    {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); BufferedImage img = ImageIO.read(BackgroundImgMenu.class.getResource("menubg.png")); JMenuBar menubar = new JMenuBar();
    JMenu fileMenu = new BackgroundImgMenu("File", img);
    JMenu editMenu = new BackgroundImgMenu("Edit", img);
    JMenu editSubMenu = new BackgroundImgMenu("SubMenu", img); editSubMenu.add(new JMenuItem("SubMenuItem-1"));
    editSubMenu.add(new JMenuItem("SubMenuItem-2"));
    editSubMenu.add(new JMenuItem("SubMenuItem-3")); fileMenu.add(new JMenuItem("Open"));
    fileMenu.add(new JMenuItem("Save"));
    fileMenu.add(new JCheckBoxMenuItem("CheckboxMenuItem"));
    fileMenu.add(new JRadioButtonMenuItem("RadioButtonMenuItem"));
    fileMenu.addSeparator();
    fileMenu.add(new JMenuItem("Exit")); editMenu.add(new JMenuItem("Copy"));
    editMenu.add(new JMenuItem("Paste"));
    editMenu.add(new JMenuItem("Cut"));
    editMenu.add(editSubMenu); menubar.add(fileMenu);
    menubar.add(editMenu);

    JFrame f = new JFrame("带背景图片的菜单");
    f.setJMenuBar(menubar);
    f.setSize(400, 400);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true); }
    }