Java day11

GUI

一. AWT
图形用户界面(Graphics User Interface, GUI)
是用户与程序交互的窗口,它比基于命令行的界
面更直观并且更友好。
GUI的基本类库位于java.awt包中.
这个包也被称为抽象窗口工具箱(Abstract Window Toolkit, AWT)。
AWT按照面向对象的思想来创建GUI,
它提供了容器类、众多的组件类和布局管理器类。
而现在的的组件包更多的使用javax.swing.*中的组件。
因为该组件的风格可以由当前系统决定。
而java.awt.*中的组件是使用sun公司的统一风格。

AWT构建图形用户界面的机制包括:
a)提供了一些容器组件(如Frame和Panel),
用来容纳其他的组件(如按钮Button、
复选框Checkbox和文本框TextField)。
b)用布局管理器来管理组件在容器上的布局;
c)利用监听器来响应各种事件,实现用户与
程序的交互。一个组件如果注册了某种事件
的监听器,由这个组件触发的特定事件就会
被监听器接收和响应;

二. 创建GUI的步骤
步骤一:选择一个容器
javax.swing包中提供了一个抽象类JComponent,
它是所有除了菜单类组件之外的AWT组件的父类。
Container类表示容器,继承了Component类。容
器用来存放别的组件,
有两种类型的容器:Window和JPanel。

  1. Window和它的子类JFrame
    Window是不依赖于其他容器而独立存在的容器。
    Window有两个子类:Frame和Dialog。
    Frame带有标题,而且可以调整大小。
    Dialog可以被移动,但是不能改变大小。
    Frame有一个构造方法——Frame(String title),
    通过它可以创建一个以参数为标题的Frame对象。
    Frame的add()方法向容器中加入其他组件。
    当Frame被创建后,它是不可见的,必须通过以下
    步骤使Frame成为可见的。
    1) setSize(int width, int height)显示设置Frame的大小,
    或者调用pack()方法自动确定Frame的大小。
    pack()方法会确保Frame容器中的组件都会有与
    布局相适应的合理大小。
    2) setVisible(true)方法使Frame成为可见的。

  2. Panel
    Panel不能单独存在,只能存在于其他容器中(Window或其子类)中,
    它有一个子类Applet,Applet可以在Web浏览器的窗口中运行。
    一个Panel对象代表了一个长方形的区域,在这区域中可以容纳
    其他的组件。可以通过Panel类的默认构造方法来创建一个Panel
    对象,然后通过Panel的add()方法向Panel中添加组件。
    如果要使Panel成为可见的,必须通过Frame或Window的add()方
    法把Panel添加到Frame或Window中。

步骤二:选择布局管理器
组件在容器中的位置和尺寸是由布局管理器来决定的。
所有的容器都会引用一个布局管理器实例,通过它来自
动进行组件的布局管理。
1. 默认布局管理器
当一个容器被创建后,它们有相应的默认布局管理器。Window、Frame和Dialog的默认布局管理器是BorderLayout, Panel和Applet的默认布局管理器是FlowLayout。可以通过setLayout()方法来重新设置容器的布局管理器。例:
Frame f = new Frame(“hello”);
f.setLayout(new FlowLayout());
2. 取消布局管理器
如果不希望通过布局管理器来管理布局,可以调用容器的setLayout(null)方法,这样布局管理器就被取消了。接下来必须调用容器中每个组件的setLocation(), setSize()或setBounds()方法,为这些组件在容器中一一定位。和布局管理器管理方式不同的是,这种手工布局将导致图形界面的布局不再和平台无关的。相反,图形界面的布局将依赖于操作系统环境。

public class ManualLayout {
public static void main(String[] args) {
Frame f = new Frame(“hello”);
f.setLayout(null); //取消布局管理器
f.setSize(300,100); //宽300, 高100
Button b = new Button(“press me”);
b.setSize(100,30); //宽100, 高30
b.setLocation(40,60); //x坐标40, y坐标60
f.add(b);
f.setVisible(true);
}
}

  1. 布局管理器种类
    java.awt包提供了5种布局管理器:
    a. FlowLayout流式布局管理器;
    b. BorderLayout流式布局管理器;
    c. GridLayout流式布局管理器;
    d. CardLayout流式布局管理器;
    步骤三:在容器中加入组件

步骤四:创建事件处理器

三. FlowLayout流式布局管理器
最简单的布局管理器,按照组件的添加次序将它们从左到右地放置在容器中。当到达容器边界时,组件将放置在下一行中。 FlowLayout允许以左对齐、居中对齐(默认方式)或右对齐的方式排列组件。特性:
. 不限制它所管理的组件的大小, 而是允许它们有自己的最佳大小。
. 当容器被缩放时,组件的位置可能会变化,但组件的大小不改变。

FlowLayout的构造方法如下:
. FlowLayout();
. FlowLayout(int align);
. FlowLayout(int align, int hgap, int vgap)
参数align用来决定组件在每行中相对于容器的边界的对齐方式,可选值有:
FlowLayout.LEFT(左对齐)
FlowLayout.RIGHT(右对齐)
FlowLayout.CENTER(居中对齐)
参数hgap和参数vgap分别设定组件之间的水平和垂直间隙。

四. BorderLayout边界布局管理器
将容器分为五个区域:东、南、西、北和中。
特征:
. 东西区域的组件保持最佳宽度,高度被垂直拉伸至和所有区域一样高;
南北区域的组件保持最佳高度,宽度被水平拉伸至和所在区域一样宽;
位于中区域的组件的宽度和高度都被拉伸至和所在区域一样大小。
. 垂直拉伸,东、西和中区域也拉伸;
水平拉伸,南、北和中区域也拉伸;
. 中区域没有组件,也会分配空间显示容器的背景颜色;
其它区域没有组件,不会分配空间;
. 容器被缩放,组件所在的相对位置不变化,但组件大小改变;
. 某个区域添加的组件不止一个,则只有最后添加的一个是可见的;

这里的constraints是String类型,可选值为BorderLayout提供的五个常量:
. BorderLayout.NORTH: 北区域,值为"North";
. BorderLayout.SOUTH: 南区域,值为"South";
. BorderLayout.EAST: 东区域,值为"East";
. BorderLayout.WEST: 西区域,值为"West";
. BorderLayout.CENTER: 北区域,值为"Center";

五. GridLayout网格布局管理器
GridLayout将容器分割成许多行和列,组件被填充到每个网格中。添加到容器中的组件首先放置在左上角的网格中,然后 从左到右放置其他组件,直至占满该行的所有网络,接着继续在下一行中从左到右放置组件。特性如下:
. 组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变。组件始终占据网格的整个区域。
. GridLayout总是忽略组件的最佳大小,所有组件的宽度相同,高度也相同。
. 将组件用add()方法添加到容器中的先后顺序决定它们占据哪个网络。GridLayout从左到右、从上到下将组件填充到容器的网格中。

六. CardLayout卡片布局管理器
将界面看做一系列的卡片,在任何时侯只有其中一张卡片是可见的,这张卡片占据容器的整个区域。

事件

一:事件处理模型的三要素:
事件源:产生事件的东西,如Button,TextFeild…组件
事件对象:描述事件的信息,如事件发生的x,y坐标和获取事件源
×××Event:ActionEvent,KeyEvent
事件监听器:一般是接口,处理组件的响应事件
Listener:ActionListener
添加事件监听器:add
*Listener
二:事件类型
键盘事件
窗口事件
鼠标事件
活动事件

三:适配器,事件监听器的实现类
***Adapter:ActionAdapter
KeyListener----->KeyAdapter
事件适配器空实现事件监听器
class XxxAdapter
MouseAdapter
ActionAdapter
KeyAdapter

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值