Merlin的魔力: J2SE 1.4.2提供两种新的外观设计

迄今为止,所有Merlin的魔力专栏都是关于Java 1.4版本的新特性,本文主要针对目前正在测试的1.4.2版本。Sun认为Windows的经典外观已经过时,没有人再使用Motif了 -- 至少在用户桌面上。您将在这一标准Java平台的最新版本中找到新款Windows外观以及称为GTK+的全新外观,当用户使用Windows XP操作系统时新款Windows外观看起来象Windows XP,GTK+使用普通Linux桌面的外观。

Swing架构提供可插入外观框架。例如,该框架提供一种标准方法使所有组件的字体为8-point bold Lucida,无需更改所有调用来创建一个组件。您只需插入新的设置到外观中,像魔法一样,所有调用都自动拾取这些更改。您甚至可以通过设置外观来改变GUI的整体风格。以前,J2SE 1.4 为以平台为导向的UI提供外观设计,如Microsoft Windows 和 Motif。它还提供专门面向Java平台的称为Metal的交叉平台UI,无论用户使用什么桌面,它看起来都是千篇一律。

更改外观设计

在我们检验最新的外观设计之前,我们先展示如何更改一个Java程序的外观,如表1所示:

表1:查找所有显示模式

import java.awt.*;
import javax.swing.*;
public class Start extends JFrame {
public Start() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = getContentPane();
JButton button = new JButton("Hello");
c.add(button, BorderLayout.CENTER);
setSize(100, 50);
show();
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());
//UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
new Start();
}
}

UIManager 的 setLookAndFeel() 调用允许您进入新外观设计完全标准化的类名中。您再也无须担心哪个类名适用于交叉平台Metal UI ( javax.swing.plaf.metal.MetalLookAndFeel) ,您只需使用 getCrossPlatformLookAndFeelClassName() 方法向系统询问名字。另一方面, getSystemLookAndFeelClassName() 将返回专用于用户桌面的UI类名。如果用户在Windows设备上运行该程序,他将通过 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 类获得Windows UI。在UNIX设备上,将返回Motif/CDE接口或 com.sun.java.swing.plaf.motif.MotifLookAndFeel 类。J2SE 1.4.2提供新GTK+外观,但不返回作为UNIX机器的系统外观类。这种情况将在J2SE 1.5版本中得到改善。图1显示了当在Windows 2000设备上运行时Start程序的输出外观:

图1:交叉平台UI

时间: 2024-09-17 04:33:01

Merlin的魔力: J2SE 1.4.2提供两种新的外观设计的相关文章

当当网广告服务负责人:B2C商城的广告服务将给广告客户提供一种新的选择

[亿邦动力网讯]2月3日下午消息,当当网在其首页正式推出"广告服务",当当网广告服务负责人称:"B2C商城的广告服务将给广告客户提供一种新的选择." 当当网广告服务负责人表示,当当网的广告服务除线上的广告专区外,还包括网站的内链和外链.精准投递与直邮广告等多种广告形式.该负责人认为,直邮广告能够依靠当当网十余年的数据积累与自身建设的服务体系,进行有针对性的投递. 业内人士看来,作为网络商城,其用户群浏览网站时本身就带有消费欲望,这是电子商务网站广告的特色优势.相比于

针对不同需求,蓝海讯通提供两种产品和服务交付模式

实际上,针对企业用户在应用性能管理解决方案部署和交付模式上的不同需求,蓝海讯通提供了两种产品和服务交付模式:传统的软件许可证模式(blueware)和基于云计算的SaaS模式(OneAPM).blueware主要针对传统大型企业,而OneAPM主要针对互联网企业开发者 . 借助OneAPM,开发者可以提升开发速度.让应用更快发布,并且能精准定位使用体验中的瓶颈.据蓝海讯通介绍,OneAPM的功能很适合支持敏捷开发模式.他们希望提供一种服务,让应用性能管理不再是问题,对开发者来说,你只需要把业务做

达沃时代的VNAS为NAS使用提供一种新可能

云计算.互联网的今天,人们对于下一代数据中心以及IT基础设施的变革需求越来越迫切.IT要极致简单.运维管理要极致智能,总之怎么解放人力怎么来.今天人们对于新的数据中心基本上有了共识,那就是标准化.弹性化.简单化.存储呢,需要通用设备来提供并承载业务,不仅要保障业务的不停机,而且还要保障对现有外部存储和服务器内部存储的利用,那么传统存储模式转向软件定义存储成为一个不错的解决手段. 比如今天的Server SAN以及超融合平台相对于传统存储的部署就是一个简化的转变.那么,作为传统存储架构中的NAS存

通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)

通过exp命令可以对Oracle数据库进行备份操作,其命令含义是:exp 用户名/密码@数据库所在ip地址:数据库端口号/数据库的service-name file=存储到的位置 exp MISPS/MISPS@orcl file=d:\MISPS.dmp 远程导出的方法 exp MISPS/MISPS@10.12.10.111:1521/cipaspd.css.com file=d:\MISPS.dmp BUFFER=5000 FULL=Y 其中FULL=Y表示备份所有(包括数据库结构,用户等

Merlin的魔力: Swing 的新JFormattedTextField组件

Java 2 标准版(J2SE),版本 1.4 为可用的 GUI 元素调色板添加了 2 个新的 Swing 组件: JSpinner 和 JFormattedTextField .在 Merlin 的魔力专栏的第一篇我们就介绍了 JSpinner 组件:我们现在将要探讨 JFormattedTextField . 虽然 JFormattedTextField 组件看起来与 JTextField 相似,但是它的行为与 JSpinner 完全不同.在最简单的情况下,您可以为电话号码提供一个类似"(#

Merlin的魔力: Java联网增强技术

Java 编程中的联网包括了定位和识别资源的能力以及通过 TCP 和 UDP 连接进行通信的能力.首先,您需要识别具有象 www.ibm.com 这样名称的资源,然后打开到该资源的连接,最后在您自己和连接的另一端之间发送信息包.由于安全性原因,可能会包括其它任务,但是整个过程是一样的.对于 Java 平台,会在 java.net 包中找到支持这些操作的类.从 Java 编程的早期到现在,这些操作中大多数都未曾发生太大的变化.但是,随着 Merlin 的发展,这些基本操作中有些已经作了改进,以支持

Merlin的魔力: 异常和日志记录

为了理解问题的根源并适当地响应,Merlin 发行版添加了几个与异常处理相关的功能.现在,您不必手工分析堆栈转储信息就可以检查堆栈跟踪信息,并且可以把异常连成一条菊花链,这样就能够在重新抛出异常时附加上异常的原因,这会大大促进调试工作.此外,现在还有一个内建的日志记录工具用来记录消息的不同级别.在 Merlin 的魔力系列的这一部分,John Zukowski 演示了这些新的日志记录和异常功能的工作原理并提供了一个示例程序以供查看和下载. 这个 Merlin 发行版中新添加的许多功能(比如异常处

Merlin的魔力: 另一个简单的Frame

在阅读 J2SE 平台最新发行版的增强功能时,您会立即注意到 Sun 最终还是听取了我们的建议.我并不是要暗示以前他们根本不听我们的建议,但他们好象把注意力更多地放在添加大规模的 API 上,而不是修补那些已经投入使用几年的 API 上.例如 AWT Frame 类.虽然 Sun 在版本 1.2 中添加了通过编程将 Frame 图标化的功能,您仍然无法隐藏 Title bar 或将 Frame 最大化.虽然您可以使用 Window 来避开 Title bar,但一些任务要求的是一个顶级的 Fra

Merlin的魔力: 长期持久性

Merlin 的一种新功能在 Sun 的 Swing Connection 中以各种形式出现已有一段时间了,实际上它首次被讨论是在 1999 年的 JavaOne 展示会上.这个功能可以将 JavaBean 组件状态长期持久地保存在 XML 文档中.序列化工作适合短期编组的需要(对于 CORBA 和 RMI)或适合将状态信息保存在一个执行的 servlet 中.但是序列化会产生许多问题,包括类库版本或 Java 运行时环境方面的问题.新的 XMLEncoder / XMLDecoder 类允许将