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

简介:
7.2 创建一个Frame

   一个顶层的窗体(也就是一个不包括在另一个窗体内的窗体)在Java中叫做一个frame;对于这个顶层窗体,AWT库中有一个类叫Frame。这个类的Swing版本叫做JFrame并且扩展了Frame类。

JFrame是为数不多的不在画布上画的Swing组件。因此,象按钮,标题栏,图标等装饰物是靠用户的窗口系统来画,而不是Swing.

     注意:大多数Swing组件类以”J”开头:JButton,JFrame等。也有象Button,Fram这样的类,但他们是AWT组件。如果你不小心丢了个”J”,你的程序可能仍可以编译和运行,但Swing和AWT组件的混合会导致视觉和行为上的不一致。

     在这一节中,我们将讨论使用一个Swing JFrame的最常用的方法。Example7-1列出了一个在屏幕上显示一个空frame的的简单程序。

 

   Example 7-1 SimpleFrameTest.java
     import javax.swing.*;
     public class SimpleFrameTest
     {
         public static void main(String[] args)
         {
              SimpleFrame sf = new SimpleFrame();
              sf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              sf.setVisible(true);
         }
     }
     class SimpleFrame extends JFrame
     {
         private static final int DEFAULT_WIDTH = 300;
         private static final int DEFAULT_HEIGHTH = 200;
         public SimpleFrame()
         {
              setSize(DEFAULT_WIDTH, DEFAULT_HEIGHTH);
         }
     }


Swing类在javax.swing包里。包的名字javax表明这不是一个核心包,而是一个Java扩展包。Swing类确实是java1.1的附加物。因为Swing类并不是作为核心层次的一部分,这使得加载Swing类到一个java1.1兼容的浏览器成为可能。(浏览器的安全管理器不允许加载任何以”java.”开头的包)。在java2平台上,Swing包不再只是一个附加物,而成为核心层次的一部分。任何与java2兼容的java实现都应该提供Swing类。然而,javax这个名字仍与java1.1代码兼容。(实际上,Swing包起初被独立出来成为com.sun.java.swing,后来杂java2早期的beta版里被基本上移到java.awt.swing,然后又在java2的后期beta版回到com.sun.java.swing在,最终,在java程序员的推动下,终于在Javax.swing找到它的位置)

默认地,一个frame有一个无用的0*0象素的大小。我们定义了一个子类SimpleFrame,它的构造函数设置size成300*200。在SimpleFrameTest类的main方法中,我们一开始构造了一个SimpleFrame对象。

接着,我们定义了当用户关闭这个frame时应该发生什么。在这个程序里,我们希望程序退出。我选择这个行为,我们使用了这句:frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     在其他有多个frames的程序里,你可能不想只因为用户关闭其中一个frame就退出程序。默认地,当用户关闭它时,一个frame隐藏自己,但程序并不终止。

简单地构造一个frame并不会自动显示它。Frames以不可见的姿态开始他们的生命周期。这在它第一次显示出来前给了程序员机会往frame里添加组件。为了显示frame,main方法调用了frame的setVisible方法。

     最后,main方法终止。注意main()方法的终止并没有终止程序,而只是main线程。显示frame激活一个用户接口线程来保持程序仍活着。

     注意:在jdk5.0以前,可以使用JFrame的继承自基类Window的show方法。Window类有一个基类Componet,它也有一个show方法。Component.show方法在jdk1.2里被禁止了。它希望你调用setVisible(true)而不是显示一个componet。然而,直到jdk1.4,Window.show方法也没有被禁止。实际上,它很有用,使得窗体可见并置于最前端。可悲的是,这个好处由于禁止政策而失去了。Jdk5.0禁止了window的show方法。

这个程序运行的结果只是一个枯燥的顶层窗体。标题栏以及旁边的修饰物例如最大小化按钮,是由操作系统而不是Swing库画出来的。如果你在X Windows上运行相同的程序,这些修饰物将不同。frame里面画所有的东西是由Swing库画的。在这个程序中,它只是用一个默认的背景色来填充frame.

注意:对于jdk1.4,你可以通过frame.setUndecorated(true)来隐藏这些修饰物。

 

注意:在前面我们写了两个类,一个定义了frame类,一个包含了用来创建和显示fram对象的main方法。你将会经常看到有些程序里main方法会融合进一个类中,例如:

class SimpleFrame extends JFrame
{
         private static final int DEFAULT_WIDTH = 300;
         private static final int DEFAULT_HEIGHT = 200;
         public SimpleFrame()
         {    
              setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
         }
         public static void main(String[] args)
         {
              SimpleFrame sf = new SimpleFrame();
              sf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
              setVisible(true);
         }
     }

从某种意义上来说在frame类中使用main方法来启动程序更简单。你不必引进另一个辅助类。然而,

很多程序员认为这种代码风格让人迷惑。因此,我们更愿意把定义用户接口的类和启动程序的类分离开。



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