快速业务通道

用IFrame跟上潮流 - 将IFrame窗口转换为炫目的应用程序窗口 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
中:

通过 重载 IWindowTitleBar 中的 paintComponent() 提供外观更精致的标题 栏

加入动态改变标题栏背景颜色的 JSlider

因为可以在任何位置上添加任何 JComponent,所以在为标题栏创建新 widget 时可以尽情发挥想象力。对于在标题栏中创建新功能这方面来说,改变背景颜色 的 JSlider 只是冰山的一角。可以开发出许多在标题栏中使用的有创造性的自定 义组件。

建议用法: 适合使用 IWindowTitleBar 的子类的情况有:

希望在标题栏中创建更复杂的图像,而不是一种单纯的颜色

常常会希望动态改变框架的标题栏属性,并且不希望每改变次它们时调用多个 函数

希望在标题栏中加入默认组件以外的其他组件

例 4:结合在一起并加上透明性

最后一个例子将其他例子结合到一起并加入了 IFrame 的最新特性——透明性 。这个例子是最复杂的,并且很好地体现了 IFrame 在用最少的工作创建具有出 色外观的应用程序窗口方面的强大能力。图 8 显示了具有某种透明性的复杂应用 程序窗口,这种透明性使它区别其他应用程序窗口。

图 8. 加入透明性

用IFrame跟上潮流 - 将IFrame窗口转换为炫目的应用程序窗口 - 编程入门网

首先,让我们介绍一下透明性。几年前,Microsoft Windows 应用程序开始有 了标准矩形以外的框架。其中使用最多的就是 Windows Media Player,从那之后 ,使应用程序具有非矩形形状就成了一种趋势和很酷的事情。是的,Java 应用程 序一直没有这种能力,并且在透明性方面总是差强人意,特别是当与本机绘制像 素交互时。

幸运的是,IFrame 改变了这种局面,可以开发具有透明性、甚至对于本机绘 制像素透明的应用程序窗口。IFrame 中的 setTransparent() 在指定的边界内绘 制指定的组件透明性。在大多数情况下,组件将是 IWindowTitleBar 或 IContentPane 的子类。应当在子类的 paintComponent() 中调用 setTransparent() ,以使它可以用它下面的正确像素重绘。

用IFrame跟上潮流 - 将IFrame窗口转换为炫目的应用程序窗口(8)

时间:2011-05-20 IBM Michael Abernethy

最后提醒一下,绘制透明性速度相对来说是慢的,应当尽可能使透明区域相对 较小。

最后这个例子使用了 IFrame 的其他更高级的功能。从 清单 8 中可以看到, 标题栏不再是标准的矩形标题栏了。它是自定义的形状,具有完全不同于矩形的 边框。因此,在所创建的 IWindowTitleBar 子类中,必须 重载 isMouseOnBorder() 和 isInsideTitleBar() 方法,以使标题栏在绘制光标时具 有正确的行为,并可以调整大小。清单 4 显示了生成例 4 中看到的应用程序窗 口所需要的代码。

清单 4. IFrame 例 4 public TestApp4()   {    setTitle("Window");    IWTUtilities.setBorderSize(new Insets(0,7,7,7));    IWTUtilities.setDiagonalSize(20);    getIContentPane().setBorder(new AppBorder());    getIContentPane().setBackground(new Color(255, 255, 102));    setTitleBar(new TitlePanel());   }   private class TitlePanel extends IWindowTitleBar   {    public TitlePanel()    {     setPreferredSize(new Dimension(800,35));     setFont(new Font("Verdana", Font.BOLD, 22));     removeWindowDecorations();    }    protected boolean isInsideTitleBar(int x, int y)    {     if (x < (int)getWidth()*.1 || x > (int)getWidth()*.9)      return false;     return true;    }    protected void isMouseOnBorder(int x, int y)    {     if (y > 10 && y > 16 && ! isInsideTitleBar(x, y))      isMouseOnBorder = true;     else      isMouseOnBorder = false;    }   

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号