[翻译]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,如需转载请自行联系原作者
目录
相关文章
|
22天前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
28天前
|
存储 SQL Java
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了(二)
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了
44 1
|
28天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
79 0
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
2天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
2天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
8天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
9天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
35 6
|
10天前
|
监控 前端开发 算法
Java技术体系
Java技术体系(韩顺平老师整理)
10 0