文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>探秘JDK 7之三:JLayer装饰Swing组件(3)

探秘JDK 7之三:JLayer装饰Swing组件(3)

时间:2010-08-31  来源:mydear

事件检测

JLayer和LayerUI结合起来可以检测视图任意区域上发生的事件(包括嵌套的子组件),这些类共同提供了4个方法来检测事件。

· public void setLayerEventMask(long layerEventMask)

调用这个JLayer方法时必须使用位掩码AWTEvent常量选择它检测到的事件类型,如:setLayerEventMask (AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);可以检测到按键和焦点改变事件。

◆public void installUI(JComponent c)

这个LayerUI方法通常放在setLayerEventMask()方法之前,这个方法类的代码首先调用超类方法 (super.installUI (c);),然后是引用JLayer的JComponent参数,最后使用setLayerEventMask(): ((JLayer) c).setLayerEventMask(AWTEvent.KEY_EVENT_MASK);返回的结果。

◆public void uninstallUI(JComponent c)

这个LayerUI方法放在没有参数的setLayerEventMask()方法后,这个方法内的代码首先调用超类方法 (super.uninstallUI (c);),然后是引用JLayer的JComponent参数,最后使用setLayerEventMask(): ((JLayer) c).setLayerEventMask(0);返回的结果。

◆public void eventDispatched(AWTEvent e, Jlayer l)

只要前面注册的事件发生了,就会调用这个LayerUI方法,在这个方法中插入的代码负责响应事件,并恰当地更新层,更新了不同的绘制属性(如颜色)后,通过传递给这个方法的JLayer参数调用repaint()方法重新绘制视图。

在清单2中,LayerUI的installUI()方法调用setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK)检测鼠标移动事件,它又调用eventDispatched()方法返回结果。

这个方法首先调用javax.swing.SwingUtilities类的convertPoint()方法确定鼠标移动事件相对于层的坐标位置。

接下来这个方法通过检查它的坐标是否落在围绕UI中心的一个矩形区域内,检测鼠标指针是否移到印记文本上方,如果坐标刚好落在这个矩形区域内,印记文本的颜色就变为淡红色,除此以外,印记文本的颜色就恢复为蓝色。

图2显示了鼠标移到印记文本上方前后的颜色变化。

498)this.style.width=498;" class="fit-image" />
图2 鼠标指针移到文本上方时,重新绘制文本颜色给用户一个不刺眼的提示

小结

JLayer对自定义绘制和事件检测的支持让你可以改进UI的各个组件,你可以将这个Swing组件和半透明及任意形状窗口特性结合起来使用,让你可以设计出更有趣的用户界面。


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载