Java图形用户界面基础

目前,Java关于图形用户界面的开发存在两套API,一个是AWT,一个是Swing。现在大多数时候Java图形用户界面开发指的是Swing的开发。

1、JFrame的作用是什么?该如何使用

一个典型的图形用户界面是一个窗口的形式呈现给用户的,Swing也不例外。其实,JFrame就起到了Swing窗口的作用。
JFrame是Swing创建视窗的一个基础类,它像一个容器一样,可以包含其他的组件进来,是其他组件赖以生存的对象。使用步骤:

  1. 用new语句创建JFrame读写,可以通过构造方法传入视窗标题参数;
  2. 设置窗口关闭时的行为,一般是结束进程;
  3. 设置视窗的外观,例如尺寸、可见与否等;
  4. 为窗口添加其他的组件,例如标签、按钮等;
  5. 必要时还可以添加一些事件,例如WindowListener等。

2、如何创建一个按钮?

按钮是一种最常见的组件。在Swing中,创建一个按钮只需要使用JButton类即可。按钮的文本看通过JButton提供的构造方法提供。JButton是一个组件,有自己的绘图方式,可以在整个界面刷新的时候自动被重绘。

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class TestJButton {
	public static void main(String[] args) {
		JFrame jf = new JFrame();
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setSize(200,200);//设置窗口大小
		jf.setVisible(true);//是否可见
		jf.setLayout(new FlowLayout());//设置布局格式
		//为窗口添加一个按钮
		JButton jb = new JButton("myButton");//添加一个按钮对象
		jf.add(jb);//把按钮添加到窗口中
		
	}
}

Java图形用户界面基础以上代码中,首先创建了JFrame对象,然后把JButton对象添加到了该窗口之中。在添加按钮之前,还设置了JFrame的布局格式,采用的均是FlowLayout,它是一种从左到右,从上到下连续均匀分布的一种布局格式器。如果没有设置布局格式,JFrame是无法直接加入到JButton组件的。

3、如何使用文本输入组件

在图形用户界面开发领域中,根据文本输入的长度不同,一般可分为文本框和文本域输入组件。Swing提供了JTextField来对文本框提供支持,用JTestArea来表示一个文本框。
JTextField代表的是只能单行输入的文本组织,与按钮类似,它只需放在窗口之中就可以自行完成绘制,例子:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class TestText {
	public static void main(String[] args) {
		JFrame jf = new JFrame("Hello Text");
		jf.setLayout(new FlowLayout());
		JTextField jtf = new JTextField(10);//创建一个文本框对象
		jtf.setText("Hello JTextField");
		jf.add(jtf);
		show(jf);
	}
	public static void show(JFrame jf) {
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setSize(200,200);
		jf.setVisible(true);
	}
}

JTextField对象在创建的时候,可以提供一个整型的参数,代表的是该文本框的绘制长度。如果需要为该**文本框赋值的话,需要调用setText()**方法,传入字符串参数即可。运行结果如下图:
Java图形用户界面基础
JTextArea也是用于文本输入的组件,与JTextFiled不同的是它允许多行输入,体积往往要比JTextField答一些。用户在JTextArea中按Enter键的时候,字符就出现了换行,代码如下:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class TestText {
	public static void main(String[] args) {
		JFrame jf = new JFrame("Hello Text");
		jf.setLayout(new FlowLayout());
		JTextArea jta = new JTextArea(5,10);//创建一个文本框对象
		jta.setText("Hello JTextArea");
		jf.add(jta);
		show(jf);
	}
	public static void show(JFrame jf) {
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setSize(200,200);
		jf.setVisible(true);
	}
}

与创建JTextField不同的是,需要输入两个整型参数,代表的是文本域的行数和列数,结果如图:
Java图形用户界面基础

3、如何捕获事件?

事件就是一个对象的状态改变了的时候,通知其他对象发生了什么事,让它做出某种反应。
事件模型一般有两种模式,推/拉模式。推模式,状态改变的对象A通知其他对象B,Java的大多数事件模型都属于这一种。拉模式,其他对象B监听感兴趣的对象A。
在一次事件模型中,往往包含了3中角色,时间发生的主体(例如按钮)、监听器和事件。事件发生的主体是事件的起源地,它们的状态一般是随着用户的操作而改变;监听器是一个类,这些类往往都会继承自某个接口;事件代表了一种动作,通过它可以获取到一些用户操作的信息。
在Swing程序中,通过注册监听器的方式来捕获事件。也就是说,组件可以根据需要来添加监听器进行某些事件的监听,其他事件则不予理睬。Swing的事件模型编程思路:

  1. 创建组件对象,如JButton;
  2. 创建实现了监听器接口或继承自适配器类的实现类,实现需要进行相应动作的抽象方法;
  3. 调用组件对象的addXXXListener()方法,为该组件添加某监听器。

4、如何使用BorderLayout布局

BorderLayout是一种最常用的布局方式,是Swing容器的默认布局管理器。BorderLayout是把容器分为东西南北和中间5个部分。除了中间部分,其他几个部分都会贴近容器的边缘,中间被其他四个所包围。
在编程中,通过add()方法把组件安放在指定方向的部位,该方法的第二个参数就是BorderLayout的方位,例如:

jf.add(button,BorderLayout.NORTH);//把一个按钮放在北部

如果只有一个参数,默认放在中间位置。BorderLayout的几种方位变量如下图:
Java图形用户界面基础

5、如何使用FlowLayout布局

FlowLayout是另外一种常见的布局方式。FlowLayou就是把组件从左到右排列,当排列到不能排以后就换到下一排。FlowLayout是从容器的中间位置开始从左往右排的。
当某种容器需要使用该布局管理器时,只需要调用setLayout()方法,传入一个FlowLayout对象即可。在加入组件的时候,直接调用add方法,不需要指定其他参数。

6、如何使用GridLayout布局

GridLayout是一种表格式的布局管理器,他把组件按照表格 的方式来存放,从第一行到最后一行。从第一列到最后一列的摆放假如的组件。GridLayout布局管理器对象在创建的时候,调用setLayout()方法,传入一个GridLayout对象即可,GridLayout对象在创建时,需要指定它的行数和列数,这就是表格的大小。

7、Swing事件模型的通用规则是什么

Swing的事件类型比较多,但是都有一个通用的使用和定义规则,主要有以下几点:

  1. 组件都有addXXXlistener()和removeXXXlistener()方法,XXX就代表事件的类型和含义;
  2. XXX事件的监听器都叫做XXXListener;
  3. XXX事件的类名叫做XXXEvent,往往作为XXXListener接口方法中的参数类型。

8、监听器的适配器的作用是什么

Java开发领域有一种开发模式叫做适配器开发,Swing的适配器正是采用这种模式开发的。为了避免代码的冗余,Swing监听器的适配器就是为一些监听器接口的方法提供默认 的空实现,这样开发者就可以直接继承自适配器就好,不必把每一个接口方法都实现。

上一篇:第十一周课程总结


下一篇:第十一周课程总结