在很多软件中,为了给用户更好的界面,很多时候在菜单栏的菜单选项都要添加图片,但在JAVA默认的JDK中的JMenuItem无法实现该功能,所以我们要继承这个类,并实现这个功能,下面我将给出详细的代码,和运行结果
我们先创建一个类ImageMenu来继承JMenuItem
代码如下:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import javax.swing.JMenuItem;
public class ImageMenu extends JMenuItem
{
private Image image = null;
public ImageMenu(String title,Image image)
{
super(title);//调用父类设置选项文本
this.image = image;
}
public Insets getInsets()
{
Insets insets = (Insets)super.getInsets().clone();
//在左边留出和文字图片宽度一样的距离
insets.left += image.getWidth(null);
return insets;
}
public void paint(Graphics g)
{
super.paint(g);
if(image != null)
{
Insets insers = getInsets();
g.drawImage(image, 0, 0, null);
}
}
}
下面写一个测试函数来看看结果
代码如下
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import com.jtattoo.plaf.aluminium.AluminiumLookAndFeel;
public class text
{
static JFrame frame;
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel");
SwingUtilities.updateComponentTreeUI(frame);
}catch(Exception e){}
frame = new JFrame("带图片的菜单");
JMenuBar jmb = new JMenuBar();
JMenu menu = new JMenu("文件");
JMenu menu2 = new JMenu("编辑");
frame.setSize(300,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageMenu im1 = new ImageMenu("打开",new ImageIcon("3.png").getImage());
ImageMenu im2 = new ImageMenu("保存",new ImageIcon("2.png").getImage());
ImageMenu im3 = new ImageMenu("刷新",new ImageIcon("1.png").getImage());
jmb.add(menu);
jmb.add(menu2);
menu.add(im1);
menu.add(im2);
menu.add(im3);
frame.setJMenuBar(jmb);
frame.setVisible(true);
}
}
运行结果如下:
实现了图片和文字一体!!!
Swing绘制带图片的JMenuItem
最新推荐文章于 2023-12-11 22:23:14 发布