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

原创 2011年01月17日 20:52:00

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

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

JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理

下面是一个应用的例子源码:HTMLDocumentEditor import java.awt.BorderLayout; import java.awt.Color; import java.aw...
  • ycb1689
  • ycb1689
  • 2013年02月18日 17:09
  • 3157

系统托盘图标以及菜单项实例

  • 2013年09月24日 19:26
  • 6.05MB
  • 下载

Android学习之菜单项实例

关于Android这里有两种实现方式,第一种是在资源文件中的menu文件中添加菜单项,第二种直接用Java代码实现。 第一种方式: res/menu/main.xml ...

Eclipse扩展点实践之添加快捷菜单项(Command方式实现)

有两种方式,一种是Action的方式,另一种是Command的方式(这两种方式的区别详见:http://wiki.eclipse.org/FAQ_What_is_the_difference_betw...
  • wjy320
  • wjy320
  • 2014年01月06日 16:38
  • 1171

SWT实现点击菜单项或按钮改变面板内容

最近在做一个基于SWT的桌面应用程序。对这方面零基础。所以开通此专栏,总结项目中的问题和经验。顺便提一下,我的开发环境使用eclipse的windowBuilder插件。 我的需求是点击菜单栏的菜单项...

【PB】带位图的菜单项实现

当读者在使用 Microsoft Word 97 时,是否曾注意到 Word 的部分菜单项旁有一个小巧的图标 (如图1所示),初次见到时,是否有耳目一新的感觉,是否想过让 PowerBuilder 创...
  • mmnn606
  • mmnn606
  • 2012年08月12日 20:57
  • 309

AlertDialog实现菜单项选择的事件

比较简单,直接放代码了,主界面就一个Button,然后出来一个弹出框菜单,然后点击再弹出一个dialog package com.example.testsdkdemo; import andro...
  • h55l55
  • h55l55
  • 2015年11月04日 11:01
  • 513
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用BasicMenuItemUI实现个性化菜单项的简单实例
举报原因:
原因补充:

(最多只允许输入30个字)