如何美化菜单界面java_用 Java 创建带图像的菜单来美化界面
在Windows的“开始”菜单上,会在菜单左侧显示一幅图像。很多基于Windows的软件也有类似效果的菜单。用Java Swing可以制作出类似效果的菜单吗?答案当然是肯定的,而且非常简单。
我们首先从Swing的JPopupMenu组件进行扩展,让其接受一个图片,显示在左侧;或者接受一个字符串,动态生成图片后,在显示在左侧。为了避免准备图片的麻烦,我们就以动态生成内存图片为例,编写一个JImagedPopupMenu类。
JImagedPopupMenu在创建时可以接受一个字符串,生成一副内存图片BufferedImage。然后,我们需要覆盖JComponent的getInsets方法,重新计算Inset的left值,将其在原数值基础上加上图片的宽度,然后返回:
public Insets getInsets() {
Insets insets = (Insets)super.getInsets().clone();
insets.left += imageIcon.getIconWidth();
return insets;
}
最后,覆盖paintComponent方法,在原基础上增加图片的绘制:
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (imageIcon != null) {
Insets insets = getInsets();
g.drawImage(imageIcon.getImage(),
insets.left - imageIcon.getIconWidth(),
insets.top,
null);
}
}
完整代码如下:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
public class ImageMenu extends JPopupMenu {
private Font font = new Font("Dialog", Font.BOLD, 13);
private ImageIcon imageIcon = null;
public ImageMenu(ImageIcon imageIcon) {
this.imageIcon = imageIcon;
}
public ImageMenu(String text) {
this.imageIcon = createImage(text);
}
private ImageIcon createImage(String text) {
BufferedImage bi = new BufferedImage(30, 1000, BufferedImage.TYPE_INT_ARGB);
ImageIcon image = new ImageIcon(bi);
Graphics2D g2d = bi.createGraphics();
GradientPaint paint = new GradientPaint(0, 0, Color.yellow, 30, 10, Color.red, true);
g2d.setPaint(paint);
g2d.fillRect(0, 0, bi.getWidth(), bi.getHeight());
AffineTransform at = new AffineTransform();
at.rotate( -Math.PI / 2);
g2d.setTransform(at);
g2d.setColor(Color.white);
g2d.setFont(font);
g2d.drawString(text, -180, bi.getWidth() / 2);
return image;
}
public Insets getInsets() {
Insets insets = (Insets)super.getInsets().clone();
insets.left += imageIcon.getIconWidth();
return insets;
}
public void paint(Graphics g) {
super.paint(g);
if (imageIcon != null) {
Insets insets = getInsets();
g.drawImage(imageIcon.getImage(),
insets.left - imageIcon.getIconWidth(),
insets.top,
null);
}
}
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setSize(600, 500);
frame.setTitle("ImageMenu");
final ImageMenu menu = new ImageMenu("Windows XP Perfessional");
menu.add(new JMenuItem("Winzip 8.0"));
menu.addSeparator();
menu.add(new JMenuItem("Programs"));
menu.add(new JMenuItem("Document"));
menu.add(new JMenuItem("Settings"));
menu.add(new JMenuItem("Search"));
menu.add(new JMenuItem("Help and Support"));
menu.add(new JMenuItem("Run..."));
menu.addSeparator();
menu.add(new JMenuItem("Shut Down..."));
JLabel label = new JLabel("Right click me to show image popup menu.");
label.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
menu.show(frame, e.getPoint().x, e.getPoint().y);
}
}
});
frame.getContentPane().add(label, BorderLayout.CENTER);
frame.show();
}
}
同样,采用这种方法,也可以将JMenu扩展出同样的效果
如何美化菜单界面java_用 Java 创建带图像的菜单来美化界面相关推荐
- JAVA 创建带个人信息,头像等内容和可变二维码的海报
文章目录 JAVA 创建带个人信息,头像等内容和可变二维码的海报 1.添加二维码依赖包 2.写画图工具类 3.运行main 方法 4.防止重复创建 JAVA 创建带个人信息,头像等内容和可变二维码的海 ...
- 界面编程---用Java创建QQ登录页面
界面编程: 图形用户界面GUI由文本框,滑块和滚动条等小部件组成,当今的计算机用户都希望其使用的软件有这样的界面.Java类库包含一组被称为Swing的包,使用户提供GUI,并接收来自键盘鼠标和其他输 ...
- 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...
- 计算器界面网格布局java,安卓案例:网格布局实现计算器界面
安卓案例:网格布局实现计算器界面 一.网格布局(GridLayout) GridLayout布局使用虚细线将布局划分为行.列和单元格,也支持一个控件在行.列上都有交错排列. (一)继承关系图 (二)常 ...
- Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 )
Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 文章目录 Java聊天室项目GUI界面化实现(Java聊天室 IO流 Socket流 GUI界面 ) 1.J ...
- 用Java创建一个学生成绩管理系统登陆界面(初级)
目录 任务与要求 代码部分 部分代码: 完整代码: 任务与要求 使用eclipse.exe创建一个登录界面,如图1所示,当用户名输入"lili",密码输入"123456& ...
- 微信公众号开发---自定义菜单的创建及菜单事件响应(java)
微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3 ...
- antlr java_使用ANTLR和Java创建外部DSL
antlr java 在我以前的文章中,有一段时间我写了关于使用Java的内部DSL的文章. 在Martin Fowler撰写的< 领域特定语言 >一书中,他讨论了另一种称为外部DSL的D ...
- java 创建用户界面_建立图形用户界面 JAVA实验
实验 7 建立图形用户界面 一.实验目的 了解图形用户界面基本组件窗口.按钮.文本框.选择框.滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用 Java 的事件处理机制. 二.实 ...
- python建立窗口并美化_Python GUI教程(十六):在PyQt5中美化和装扮图形界面
在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式, ...
最新文章
- 谢文睿:西瓜书 + 南瓜书 吃瓜系列 6. 神经网络
- 【嵌入式】C语言高级编程-container_of宏(04)
- mysql单源多表同步单库单表_MySQL主从复制单表或者多表
- createSQLQuery与createQuery的区别
- php 获取父类名称,[typecho]获取 父级分类 名称?
- HDU 5387 Clock(分数类+模拟)
- 请君入瓮: 火眼自称遭某 APT 国家黑客组织攻击
- 兄弟连学python(4)——Css选择器
- 【visio】visio软件安装
- navicat 10.1.7 注册码
- C++ stl库 手写 源码分析
- 力扣刷题 DAY_84 贪心
- java socket是什么_socket系列之什么是socket
- 码农如何克服“职业病”
- WEB——LNMP服务搭建
- 4246. 【五校联考6day2】san (Standard IO)
- 【易开嵌入式】rt-thread+stm32f407+nandflash,实现RL-FLASHFS文件系统移植
- 2021.07.28
- myeclipse17创建Web、Maven项目
- ATFX:人民银行1年期MLF降息10基点,USDCNH大涨