关闭

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

1377人阅读 评论(1) 收藏 举报

要实现个性化菜单最常用的方法是继承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的子类。

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:59111次
    • 积分:971
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:0篇
    • 译文:0篇
    • 评论:36条
    文章分类
    最新评论