用BasicMenuItemUI实现个性化菜单项的简单实例

要实现个性化菜单最常用的方法是继承JMenuItem类,然后再重写paintComponent方法,但这个作法有几个不足之处,一是不能绘制菜单项在高亮色效果,二是不能重设组合键的字体颜色,三是当菜单项在有无图标时显示菜单文字时出现缩进混乱,四是复选/单选图标显示混乱。为此我特地采用BasicMenuItemUI类实现菜单项的个性化。

 

BasicMenuItemUI类关于绘画的方法共有四个,而且分工明确很有条理。
paint :当菜单项显示时负责更新重绘菜单项表面。
paintBackgound :绘制菜单项的背景。
paintText :绘制菜单项的文字
paintMenuItem :绘制菜单项

 

其实这四个方法完全中只要重写一个paint方法是继承时ComponentUI类的,也就是别的UI类都有方法,主要负责画面的更新,而paintBackground用于绘制背景,包括菜单项的高亮显示,paintText用于绘制文字,可在此方法中实现文字的缩进。paintMenuItem将在调用了paintBackground和paintText方法后显示,因此我觉得没必要再重写paintMenuItem方法。

 

BasicMenuItemUI类内置了一个MouseInputHandler类,可以用于实现鼠标的侦听,可以通过createMouseInputListener方法来实现诸如鼠标移入、移出、按下、释放等功能。

另外BasicMenuItemUI类还有一些属性相当实用的属性
acceleratorForeground:设置组合键字体的颜色
acceleratorSelectionForeground:设置组合键处于高亮时的字体颜色
acceleratorFont:设置组合键文字字体,不过实际测试中没有效果。

另外为了能让子菜单项和其他菜单项拥有相同的界面样式,也可以把用BasicMenuItemUI类实现的子类用于JMenu上,以方便统一的菜单界面样式,但这样做的同时也失去了JMenu自动弹出子菜单的功能,因此可以用再实现一个继承了BasicMenuUI的子类。

这是我做一个简单的演示,一些相关的代码我都做了注解,毕竟代码并不复杂。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Greentea107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值