2012世界末日暨环境保护主题站,关注国内外最新2012世界末日信息,旨在通过关注,收集,展示2012世界末日相关资料的方式,唤醒并提高人们保护环境与爱护地球的意识,引导人类保护环境.
最近一直比较忙,所以一连几天都没有更新。本来觉得没什么,后来有几个网友都问起为什么没有更新,才觉得大家对我的博客还是比较关心的。于是觉得挺对不起大家的。终于到了周末,昨天晚上忙乎了一晚上,写了个Swing演示,今天把它共享出来,算是弥补。
收到一个朋友的邮件说如何在Swing中实现组件的动画效果,就像JIDE的那些组件一样。的确Swing框架的灵活性和可扩展性,使得它非常适合做这样Makeover工作。我简单总结一了以下,这种组件不外乎要有以下三种元素:
1.外观华丽。这包括使用渐变色,线条和字体反走样,图标设计漂亮抢眼,界面变化要柔和等等。但要避免设计太花哨,给人华而不实的感觉。原则上避免颜色太 碎,图标应以简洁为主,不可滥用图片等。技术上没有多大要求,主要是美工,你需要掌握各种做图工具,自己最好有好的审美和设计能力。
2.动画效果。组件行为变化要柔和化,尽量使用动画效果,如淡入淡出、滚动弹出等等。技术上最常用的方法是使用javax.swing.Timer。为什 么要使用javax.swing.Timer,这是因为javax.swing.Timer触发的事件都在EDT上执行,是线程安全的。除此外还需掌握 Java 2D的常用接口及图像处理的常见技巧。
3.空间布局。这种组件空间布局的特点是立体、动态、拖拽式的。这和人的认知能力有关。人类认知的特点是具体到抽象。二维、静态和键盘式操作对普通用户来 说太过抽象和专业化,需要一定的辅助学习才能理解的。而三维、动态、拖拽式操作更贴近于感性的认知范畴。因此这类组件经常有浮动式窗口、组件布局动态变化 及拖拽式操作等特征。实现技术包括布局管理器(LayoutManager)、Swing组件分层结构、Swing事件体系结构以及DnD接口等。
美工对于java程序员来说可能比较缺乏,但是华丽外观不仅仅是美工技术,这包括一些宏观设计原则。java程序员完全可以通过掌握这些方针原则来提高自 己的设计水平。前面文章介绍那个《Swing外观设计方针》就是一本这样的书。至于美工,我觉得如果你有美术天分,那就要充分利用;如果没有,那么你可以 模仿,熟悉几种的图形工具就完全可以不用自己的画图做出比较漂亮的图标、图片(当然没有考虑版权问题)。我就是后者,但是我发现我平时只需要PrScrn 键(抓图)、Paint(Windows 画图工具,切图、剪裁、转换格式)、PowerPoint/OpenOffice Imprise(画图)、Google Image(搜索图片)就已经足够了。其他所需的技术就需要你掌握Swing和Java 2D方方面面的技术了。当然复杂的组件不仅仅是靠掌握这些技术能解决的,可能你还需要能比较好地熟悉各种编程模式。
这个朋友特别提到Windows上的折叠式操作面板,他说:
另外,我对JIDE中两个东西很感兴趣,一个是CollapsiblePanel(Windows Explorer左边的常见任务),点击后折叠、展开子面板,而且是动画效果
因此昨晚就特地试了一下。虽然以前就大概明白使用Timer和布局管理器以及图像处理就可以实现这些东西,但一直没有做。昨晚的实验还是很成功的,大概花 了两个小时就实现了这个面板。工作过程大概就是分解这些面板组件、解析那部分需要动画、应该在哪儿触发何种事件。另外就是编写这些组件,不断调试。这个过 程的大部分时间都被效果调整占去了。你需要不断的运行程序,抓取屏幕,然后将它帖到Paint中,然后放大,然后和Windows上的抓图比较,包括大 小、尺寸、颜色、字体、微观变化等等。最后算是基本实现了Windows这个折叠式的面板组件。下面的是我的演示程序的一个抓图:
这个是淡出淡入动画效果:
下面的Enable Animation的JCheckBox可以设置是否使用动画效果。选择上折叠和展开就具有动画效果。
这个组件的类名是dyno.swing.beans.FolderPane。使用比较简单:
FolderPane fp=new FolderPane();//设置是否有动画效果,缺省没有 fp.setAnimated(true);//添加子面板 fp.addFolder("文件和文件夹任务", getFileFolderPane()); fp.addFolder("其他位置", getOtherPlacePane()); fp.addFolder("详细信息", getDetailsPane()); add(fp, BorderLayout.CENTER); |
主要接口有两个:
设置是否要动画效果 public void setAnimated(boolean b) 添加面板,title是面板标题文字,content是应用程序组件 public void addFolder(String title, JComponent content) |
这个演示的源码可以从这儿下载,是一个NetBeans工程。编译之后,直接双击foldered_pane.jar既可观看效果。源代码中有详细的注解。 更新:刚刚修改了一下,现在可以支持JScrollPane,即能放到JScrollPane,并能在动画时动态的更新JScrollPane状态。
posted on 2012-02-08 21:26
todayx.org 阅读(354)
评论(2) 编辑 收藏