初识图形用户界面(1)

本文记录了博主在《软件构造》课程Lab3中首次自主设计图形用户界面的经验。通过学习Java教材,博主使用JFrame实现了窗体显示。程序创建了一个300x200像素的窗体,并设置了窗体关闭时退出程序。文章详细解释了代码逻辑,包括事件分派线程、窗体大小设置以及如何使窗体可见。
摘要由CSDN通过智能技术生成

写在前面:在《软件构造》课程的Lab1中,第一次接触了图像界面,但是图形界面已经为我们设计好了,并不需要我们自己去实现,在Lab3中,实验要求使用图形用户界面或者命令行,博主采用了图形用户界面,博主通过学习java教材,自主完成了图形用户界面的设计,在这里分两次叙述自己对图形用户界面的心得与体会。

一.显示窗体

在Java中,顶层窗口(就是没有包含在其他窗口中的窗口)称为窗体(frame)。AWT库中有一个称为Frame的类,用于描述这个顶层窗口。这个类的Swing版本名为JFrame,它扩展了Frame类。JFrame是极少数几个不绘制在画布上的Swing组件之一。因此,它的修饰部件(按钮、标题栏、图标等)由用户的窗口系统绘制,而不是由Swing绘制。

(1)创建窗体

在这里介绍使用Swing JFrame的最常见方法。下面给出一个显示空窗体的简单程序:

package simpleFrame;

import java.awt.*;
import javax.swing.*;

public class SimpleFrameTest {
	public static void main(String[] args) {
		EventQueue.invokeLater(() -> {
			var frame = new SimpleFrame();
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setVisible(true);
		});
	}
}

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);
	}
}

下图为该程序执行的结果:

下面来逐行分析这个程序。

Swing类位于javax.swing包中。包名javax表示这是一个java扩展包,而不是核心包。

在默认情况下,窗体的大小为0*0像素,这种窗体没有什么实际意义。这里定义了一个子类SimpleFrame,它的构造器将窗体大小设置为300*200像素。这是SimpleFrame和JFrame之间唯一的差别。

在SimpleFrameTest类的main方法中,我们构造了一个SimpleFrame对象并使它可见。

在每个Swing程序中,有两个技术问题需要强调。

首先,所有的Swing组件必须由事件分派线程配置,这是控制线程,他将鼠标点击和按键等事件传递给用户接口组件。下面的代码用来执行事件分派线程中的语句:

EventQueue.invokeLater(()->
{
    statements
});

接下来,定义用户关闭这个窗体的响应动作。对于这个程序而言,我们只是让程序简单地退出。选择这个响应动作的语句是:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

在包含多个窗体的程序中,不能在用户关闭其中的一个窗体时就让程序退出。在默认情况下,用户关闭窗口时只是将窗体隐藏起来,而程序没有终止。 

仅仅只是构造窗体,窗体是不会自动显示出来的。窗体起初是不可见的。这就给了程序员一个机会,可以在窗体第一次显示之前向其中添加组件。为了显示窗体,main方法需要调用窗体的setVisible方法。

在初始化语句结束后,main方法退出。需要主义,退出main并没有退出程序,终止的只是主线程,事件分派线程会保持程序处于激活状态,直到关闭窗体或调用System.exit方法终止程序。

下一次博主将介绍窗体的相关属性和显示信息的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值