图形用户界面
(GUI)
可以通过键盘或鼠标来响应用户的操作,
Java
提供了
AWT
和
Swing
两个包进行图形用户界面编程。
AWT
是一组
Java
类,此组
Java
类允许创建图形用户界面
(GUI)
,
AWT
提供用于创建生动而高效的
GUI
的各种组件。
AWT
是
Swing
的基础,但是
AWT
仔图形组件的绘制方面并不是完全的“平台独立”;
Swing
是一个带有丰富组件的
GUI
工具包,它组成了
JFC
的用户界面功能的核心部分。
AWT
的基本思想使:以面向对象的方法实现了一个跨平台的
GUI
工具集,提供了各种用于
GUI
设计的标准组件。大致上可以将这些类归纳为:图形界面组件、事件处理对象、图形和图像工具和布局管理器。
容器类(
Container
)
是
Component
类的子类,容器组件是一种特殊的组件,它的功能是包含其他基本的
GUI
组件。
即容器是可以存放组件的区域,可在容器上进行绘制和着色
。
java.awt
包中的
Container
类可直接或间接派生出两个常用容器:框架(
Frame
类)和面板(
Panel
类)。框架是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的区域。
Panel
没有具体的图形表示,但它却是实现
GUI
结构化的一个至关重要的组件,通常用它来实现
GUI
基本组件的组合。
框架
Frame
:
创建的窗口式独立于
Applet
和浏览器的可独立运行的主窗口,通常用于开发桌面应用程序。它定义了一个包含标题条、系统菜单栏最大化
/
最小化按钮及可选菜单条的完整窗口。当一个Frame窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用setVisible()来显示窗口。Frame默认的布局管理器是BorderLayout,默认的添加组件位置是BorderLayout.CENTER。
面板
Panel
:
面板不是一个单独的窗口,它只是包含在窗口中的一个区域。面板是可以将许多组件组合起来的一种容器。最简单创建面板的方式就是通过面板的构造函数
Panel()
来进行。必须将面板添加到窗体中。
Applet
的缺省布局是
FlowLayout
;
在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。
Applet
继承自
Panel
,所以可以推断
Panel
的默认布局管理器是
FlowLayout
,所以向其中添加组件的顺序是自左向右,自上向下。
对话框
Dialog
:
也是一种容器,其默认的布局管理器是
BorderLayout
。有模式(
model
)和非模式(
modeless
)两种,模式对话框只让应用程序响应对话框内的事件而其他窗体中的事件则不能响应;而非模式对话框则可以响应其他窗体中的事件。
布局管理器:
在
AWT
中每个组件在容器中都应该有一个具体的位置和大小,我们想在容器中排列若干个组件时,会很难控制它们的大小和位置。为了简化编程者对容器上的组件的布局控制,一个容器内的所有组件的显示位置可以由一个
“
布局管理器
”
来管理,我们可以为容器指定不同的布局管理器,在不同的布局管理器下,同一组件将会有不同的显示效果,并且我们不能完全按自己的意愿设置组件的大小和位置了。
为了我们生成的图形用户界面具有良好的平台无关性,
java
语言中提供了布局管理器这个工具来管理组件在容器中的布局,当容器需要对某个组件进行定位或判断其大小尺寸时就会调用其布局管理器。所有布局都实现
LayoutManager
接口。
Java
中的布局类型包括以下几种:
FlowLayout
(流式布局);
BorderLayout
(边界布局)
;
GridLayout
(网格布局);
GridBagLayout
(网格包布局);
CardLayout
(卡片布局)。
布局类型的选用:
每个布局管理器都有自己特定的用途。要按行和列显示几个同样大小的组件,
GridLayout
会比较合适;要在尽可能大的空间里显示一个组件,就要选择
BorderLayout
或
GridBagLayout
如何设置布局:
每个容器(
Container
对象)都有一个与它相关的缺省的布局管理器。
Applet
的缺省布局是
FlowLayout
;
在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。
可以通过
setLayout( )
方法为容器设置新的布局。
注意:
定义窗体的大小,如果是在构造函数中使用:
super.setBounds(0,0,400,300);
来实现,则在主函数中,只需要使用
f.show()
,或者
f.setVisible(true);
即可,但是如果是使用
getPreferredSize()
方法来设置窗体的大小,则还需要使用
f.pack();
语句。关闭窗体的方法有多种:
1
)添加事件监听器:
f.addWindowListener(new WindowAdapter() //
对窗口事件进行监听
(
关闭窗体事件
)
{ public void windowClosing(WindowEvent e)
{ System.exit(0); //
正常退出
Java
虚拟机
}
});
2
)构造函数中添加
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
语句
重写如下的方法:
protected void processWindowEvent(WindowEvent e) //
对应前面的语句实现窗体的关闭功能
{ super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING)
{ System.exit(0); //
正常退出
Java
虚拟机
}
}
3)JFrame
中的关闭窗体监听事件
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
关闭窗口操作(正常退出
JVM
)
JFramenoren
的
setDefaultCloseOperation()
方法只是将窗体隐藏,所以要将其改为
JFrame.EXIT_ON_CLOSE
才可以正常退出虚拟机,关闭窗体。