高级Synth:有了最新的Swing外观,定制UI不在话下

简介:本文将深入透视 Synth 外观,它是 Java 5.0 中为 Swing 引入的最 新 内容。通过为 Java UI 编程引入“皮肤”的概念,Synth 使开发人员可以为应 用 程序创建和部署定制的外观。软件工程师 Michael Abernethy 将带您从头开始 逐 步构建一个具有 synth 外观的应用程序,让您充分了解 Synth 的概念。阅读本 文之后,您应该可以在短时间内创建具有专业外观的 UI。

就在 Sun 一如既往地试图“再次引入 Java Desktop”之际,Java UI 开发 人 员的抱怨之词亦已表面化:要创建完全定制的外观实在太难。这样做不仅要花费 太多的时间,并且 Swing UI 代码的编写和文档的编制也极为不堪,常常是乱杂 一气,缺乏规划。为了创建完整的外观,开发人员需要继承 Metal 外观的 39 个 类,或者继承 Basic 外观的 60 个类。谁想通过重写整个包来改变应用程序呈 现 外观的方式呢?用 Swing 创建定制外观有多难,通过下面的事实同样可窥见一 斑 :在很多开发人员为开源项目添砖加瓦的时代,Internet 上可用的自定义 Swing 外观几乎是凤毛麟角 —— 总共大约是 20 个,其中少数在 SourceForge.net 上 (请参阅参考资料)。

美丽只是肤浅的东西

进入 Synth,Sun 希望它能使应用程序外观的个性化过程变得容易。Synth 的 目标很简单 —— 让开发人员不必编写任何代码就可以创建新的外观。这似乎是 个不错的解决方案。程序员一般没有突出的艺术才华,而图形设计人员通常也不 是 Java 编程专家。Synth 把对外观的所有描述从代码中分离出来,而将其放入 外部的 XML 文件和图像文件中,为上述问题提供了大快人心的解决之道。这种 完 全在外部文件中描述的外观被称作皮肤(skin)。

Sun 的皮肤概念并不是什么创新。例如,Winamp 有数百种皮肤,Firefox 也 有几十种皮肤,这些皮肤很容易创建,只需更改一个 XML 文件即可。想像一下 , 仅仅修改一个 XML 文件,就能快速、容易地为 Java 应用程序创建一个外观。 再 想想这样一来的结果 —— 几百个互不相同的 Swing 外观。Java UI 开发人员 当 然有理由欢呼了。

本文将深入分析 Synth 外观,向您展示创建一个完整的外观或皮肤所需知道 的一切。您会看到一个带有示例皮肤的应用程序,这个应用程序使用了 Synth 所 有重要的概念。然后,我会逐步剖析这个皮肤,在构建 XML 文件的过程中,一 一 教会您 Synth 的各个概念。

本文最后一节将尽力回答开发人员关于 Synth 性能、bug 和缺陷以及 Synth 在省时方面的表现等种种问题。阅读本文之后,您应该会愿意拥护 Synth 作为 外 观解决方案,并准备马上使用它来创建自己的 Swing 外观。

Synth 基础

Synth 是一个白板(tabula rasa)外观 —— 一块完全空白的画布,表现为 一个完全空白的面板(panel),只有在 XML 文件中定义了组件时,它才会显示 东西。一旦定义了组件,在应用程序上设置 Synth 外观就再容易不过了,如清 单 1 所示:

清单 1. 设置 Synth 外观

SynthLookAndFeel synth = new SynthLookAndFeel();
  synth.load (SynthFrame.class.getResourceAsStream("demo.xml"), SynthFrame.class);
  UIManager.setLookAndFeel(synth);

时间: 2024-11-01 15:04:01

高级Synth:有了最新的Swing外观,定制UI不在话下的相关文章

AspxTreeList数据绑定以及模板和外观定制的运用

如何实现DevExpress开发控件中的AspxTreeList的数据绑定,以及模板运用和外观自定义.为说明这个问题,我们先看下面这幅图. 了解这幅图后,我们提出这么一些问题: 一.如何绑定数据,显示层级结构. 二.如何在不同的层级节点上显示不同的图标和内容,这里Report View中表现的四层使用的是不同的图标.而在Organisation第一层使用图标,以后的层中却显示文本,并在第三层以后有超链接more追加显示. 三.Report View中Check字段的逻辑值"真".&qu

一些最新的 iPhone APP 的 UI 设计实例

本文收集的一些最新的 iPhone 下的 APP 的 UI 设计实例或许对你开发 APP 有所帮助.不过很抱歉,这里只有一个截图. Notesbook App idea Cause.It iPhone App Confirm Payment PayPal for iPhone redesign Hattrick App Starbucks application Home View Transactions Camera Awesome New iPhone app design iOS Top

[JAVA100例]010、创建一个窗体

import javax.swing.*; import java.awt.*; /** * <p>Title: 创建自己的窗体</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Filename: mainFrame.java</p> * @version 1.0 */ public class mainFrame e

Swing使用Substance外观包异常问题

问题一:今天更新我的Java版QQ,在网上找到了Substance外观包,效果不错,直接用了,可是设置水印问题时就出现问题,网上有现成的例子 JFrame.setDefaultLookAndFeelDecorated(true);   JDialog.setDefaultLookAndFeelDecorated(true);   try  {               SubstanceImageWatermark watermark  =   new  SubstanceImageWater

戴尔携最新发布的Statistica软件,进一步推广高级分析功能

戴尔于今日宣布正式推出屡获殊荣的Statistica 高级分析平台的最新版本,即Dell Statistica 13.1.该新版本将提供一系列强大的功能,旨在助力"平民数据专家",帮助各企业机构更好地满足日益增长的物联网分析需求,以及更深入地利用日趋异质的数据环境.新特性包括协助"平民数据专家"轻松准备结构化与非结构化数据.在全球各地的设备与网关上部署分析功能以实现边界评价(edge scoring)以及将数据库内部分析功能拓展至Apache Hive.MySQL.

Swing本地外观与Substance外观之间的切换问题及解决方案

Swing应用程序如果是在开源的Look&&Feel 之间切换,感觉很容易,但是如果把应用程序在开源外观下切换到系统默认的或者JDK自带的外观时,问题就来了.不是没有标题栏,就是标题栏的外观没有改变,用的是系统的窗口装饰.这些是因为在应用程序启动时在main方法里添加了这样一句代码造成的: JFrame.setDefaultLookAndFeelDecorated(true); 目前解决这个问题的办法就是先将 原来的JFrame dispose掉 ,然后在new一个 JFrame ,让原来

Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

  前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的产品! 有机会作Swing软件的开发,让我非常有感觉! 呵呵,希望有机会能够用Java3D编写软件,那种感觉一定更棒! Java和Swing都是杰作.我这个人对别人一向很挑剔的,能够得到我由衷地赞誉,可想而知它们有多优秀了.奇怪的是,它们居然一直都无法占领桌面市场.有人说这是技术的原因.我认为这

Java中的外观模式

外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的 接口,是设计模式中一种比较简单的设计思想,但是,也是最常用的一种设计模式. 举例: 当 你想吃橘子的时候,你需要做那几件事呢? 1:去买橘子 2:剥橘子 3:吃橘子 这样去一步一步的调用各个方法是不是觉得很麻烦呢?所以,我们需要做的工作就是简化这些步骤,把它封装 在一个方法中实现. 实现: 下面给出实现代码的UML图.

MFC程序员WTL指南(6)高级对话框用户界面类

第五章介绍 在上一篇文章我们介绍了一些与对话框和控件有关的WTL的特性,它们和MFC的相应的类作用相同.本文将介绍一些新类实现高级界面特性新类:控件自画和自定外观控件,新的WTL控件,UI updating和对话框数据验证(DDV). 特别的自画和外观定制类 由于自画和定制外观控件在图形用户界面中是很常用的手段,所以WTL提供了几个嵌入类来完成这些令人厌烦的工作.我接着就会介绍它们,事实上我们在上一个例子工程ControlMania2的结尾部分已经这么做了.如果你正随着我的讲解用应用程序生成向导