[翻译]Java 核心技术(第7版)(2)

简介:
Chapter 7. 图形编程

至此,你还只了解到如何编写从键盘接受输入,进行处理并在控制台显示结果。这并不是现在大多数用户想要的。现代的程序和网页并不是这样运行的。本章将开始介绍编写使用图形用户接口(GUI)的java程序。尤其值得一提的是,你将学会如何编写在屏幕上改变窗体大小和定位窗体,在一个窗体上用各种字体来显示文本,显示图象等等。这将为你后续章节编写有趣的程序提供一些有用的技术。

接下来两章将展示如何处理像按键和鼠标点击这样的事件,如何往你的应用程序中添加例如菜单,按钮这样的接口元素。当你完成这三章后,你将了解编写stand-alone的图形应用程序的本质。

第10章将展示如何编写使用这些特性并嵌入到web页面的applet。要了解更复杂的图形编程技巧,请参阅第2卷。

7.1 Swing简介

   当java1.0发布时,它包含了一个为基本的GUI编程提供服务的sun称之为抽象窗口工具集(AWT)的类库。基本的AWT库通过在各个目标平台(Windows,Solaris,Macintosh等等)代理用户接口元素的生成和行为到本地GUI工具集的方式来处理用户接口元素。例如,如果你在java窗口中使用了原始的AWT来

放置一个TextBox,一个潜在的同等的text box将实际处理文本输入。在理论上,目标程序将可以以目标平台的外观在任何平台上运行――强调了Sub的“书写一次,到处运行”

对于简单的应用程序这种”同等“方法运转的很好,但很快就发现要写一个依靠本地用户接口元素的高质量的可移植的图形库是极困难的。象菜单,滚动条,文本域这样的用户接口元素在不同的平台上会有微妙的差异。很难通过这种方法来给用户一种一致的,可预测的用户体验。更糟糕的是,有些图形环境(例如X11/Motif)不象Windows或Macintosh那样有那么丰富的用户接口组件。这反过来进一步限制可移植库通过基于对等 “最小公共特性”方法。最后,用AWT构建的GUI应用不如本地的Windows或Macintosh应用那么好看,也没有那些平台用户预想的那样的功能。更令人沮丧的是,AWT用户接口库在不同的平台上有各种不同的bugs。开发者抱怨他们不得不在各个平台上测试应用程序,从而变成了”Write once,debug everywhere“

     1996年,Netscape创建了一个使用完全不同方法的GUI库――IFC(Internet Foundation Classer)。象按钮,菜单等用户接口元素是被画到空白窗体上去的。唯一需要的同等功能是创建窗体和在窗体上画图。因此,不管程序在哪个平台上运行,Netscape的IFC窗口的外观和行为都一样。Sun和Netscape一起完善了这个方法,创建了一个用户接口库Swing。Swing在java1.1中作为一个附加并在JDK1.2中成为标准库的一个部分。

     因此,正向Duke Ellington说的,“要是没有用Swing,它更本不能算是个东西。”Swing现在是非基于对等的GUI工具集。Swing是java基础类(JFC)的一部分。JFC是一个巨大的类库并且包含了远远多余Swing的东西。JFC特性不仅仅包括Swing组件,还包括一个可访问API,一个2DAPI,一个拖放API.

注意: Swing 并不是AWT的替代物――它是建立在AWT架构上的。Swing只是提供给你更多的有用的用户接口组件。当你编写一个Swing程序时,你可以利用AWT的基础知识,甚至来处理。从今往后,当我们意为非基于对等的用户接口类时使用“Swing”,而意为像事件处理这样的窗口工具集的潜在机制我们说”AWT”

     当然,基于Swing的用户接口元素在用户的屏幕上显示出来要比使用AWT的基于对等的组件要稍微慢一点。以我们在任一台正常的机器上的经验来说,速度差异并不是个问题。另一方面,选择Swing的理由如下:

1)Swing拥有一组便利的用户接口元素

2)Swing基本不依赖于底层平台。因此它有更少的平台相关的错误

3)Swing提供了跨平台的一致的用户体验

所有这些都意味着Swing有实现Sun的“书写一次,到处运行“口号的能力。

当然,第3条有潜在的缺点:如果用户接口元素在所有平台上看来都一样,那么他们将同本地控件看起来不同,从而使得用户不熟悉它们。

Swing以一种优雅的的方式解决了这个问题。程序员在编写Swing程序时可以赋予程序一个特定的外观模式。

         注意:JDK5.0包括一种叫做Synth的新的外观模式。通过Synth,你可以通过提供图象文件和XML描述符而不需要任何编程来定义一种新的外观。

 

         Sun还开发了一种叫做”Metal”(后来市场宣传又取名为”java外观”)的平台独立的外观,然而,大部分程序员还上继续称呼它为”Metal”,我们在书中也这样。

         一些人批评Metal庸俗,这在5。0发布版中改进了。现在Metal外观支持多种主题―――颜色和字体的些许变化。默认的主题叫“Ocean”,在本书中,我们在所有的图形程序中使用Swing,Metal外观以及Ocean主题。

         注意:现在大部分用户接口编程都使用Swing,只有一个值得注意的例外。Eclipse集成开发环境使用一个叫做类似于AWT的图形工具集SWT,也是在各种平台上映射到本地组件。

         最后,如果你以前使用过VB或C#开发过Windows应用,你可能熟悉他们提供图形布局工具和资源编辑器的使用简单性。这些工具帮助你设计应用程序的可视化外观,然后帮你产生很多GUI代码。尽管对于java编程GUI构建器也有,但这些产品并不如Windows提供的工具成熟。然而,要完全理解图形用户接口编程(或者更进一步,我们感觉,要有效使用这些工具),你需要了解如何手工构建一个用户接口。自然地,这通常需要编写许多代码。

 

本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/08/13/475576.html,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
228 44
|
1月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
265 1
|
2月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
81 4
|
2月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
608 1
|
3月前
|
人工智能 Java
Java多任务编排技术
JDK 5引入Future接口实现异步任务处理,但获取结果不够灵活。Java 8新增CompletableFuture,实现异步任务编排,支持流式处理、多任务组合及异常处理,提升执行效率与代码可读性,简化并发编程复杂度。
|
2月前
|
Java 测试技术 API
2025 年 Java 开发者必知的最新技术实操指南全览
本指南涵盖Java 21+核心实操,详解虚拟线程、Spring Boot 3.3+GraalVM、Jakarta EE 10+MicroProfile 6微服务开发,并提供现代Java开发最佳实践,助力开发者高效构建高性能应用。
439 4
|
1月前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
192 0
|
2月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
175 3
|
3月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
80 2
|
3月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
451 1