在java中,顶层窗口(就是没有包含在其他窗口中的窗口)被称为框架。
在AWT库中有一个称为Frame的类,用于描述顶层窗口。这个类的Swing版本名为JFrame,它扩展于Frame类。JFrame是极少数几个不会只在画布上的Swing组件之一,因此,它的修饰部件(按钮、标题栏、图标等)由用户的窗口系统绘制,而不是由Swing绘制。
下面给出一个在屏幕中显示一个空框架的简单程序:
import java.awt.*;
import javax.swing.*;
/*
* Swing类位于javax.swing包中,包名javax表示这是一个java扩展包
* 而不是核心包。*/
public class SimpleFrameTest {
public static void main(String[] args)
{
/*在每个Swing程序中,有两个技术问题需要强调
* 首先,所有的Swing组件必须由事件分派线程进行配置
* 线程将鼠标点击和按键控制转移到用户接口组件
* 下面的代码片段是事件分派线程中的执行代码*/
EventQueue.invokeLater(() ->
{
SimpleFrame frame = new SimpleFrame();
/*在这里定义一个用户关闭这个框架时的相应动作,对于这个程序而言
* 只让程序简单地退出即可,选择这个响应动作的语句是下面这句*/
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
class SimpleFrame extends JFrame
{
/*构造器将框架大小设置为300 * 200像素
* 这是SimpleFrame和JFrame之间唯一的差别*/
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
public SimpleFrame()
{
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
}
}
在初始化语句结束后,main方法退出
* 需要注意,退出main并没有终止程序
* 终止的只是主线程
* 事件分配线程保持程序处于激活状态
* 直到关闭框架或者调用System.exit方法终止程序
*
* 此程序显示的只是一个很枯燥的顶层窗口
* 在这个图中看到的标题栏和外框装饰都是由操作系统绘制的,而不是Swing库
* Swing库负责绘制框架内的所有内容
* 在这个程序中,只用默认的背景色填充了框架*