怎么设置JMenuItem菜单项的背景图片 ?
解决方案 »
- JSplitPane布局的简单问题,大家进来看看啊。。。
- 帮我修正一下这道线程的错误
- 用javamail做过发邮件功能的进来帮忙看看这个问题!!!
- 顺序读完一个文件后如何跳回文件开头
- 关于用ServerSocket申请端口的一点疑问
- 一个数组问题
- 编译正常,运行时出现java.lang.NoClassDefFoundError。原因是用到了很多第三方的.jar文件。如果一个一个加入到ClassPath太烦了,怎么解
- jbuilder中如何配置corba应用程序
- 散分:HelloWorld程序终于出来了,好辛苦!附带三个问题。
- 请问cartesian coordinates(笛卡尔坐标)是个什么概念?
- 询问JAVA如何实现C中fscanf功能
- 恺撒加密算法实现???
我不是问设置图标,而是设置整个菜单条的背景图。
?
What confused me is why you must set a background image?
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() 里边可以画个背景出来。
仅仅是个人猜想。
期待高手。
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); }
}