JAVA图形用户界面

Swing

 

概念引入

要想产生交互效果,就需要了解awt,swing的事件处理机制

事件对象:事件对象主要回答发生了什么事情。事件对象本身封装了包含所发生的各种事件的有效信息,包括事件源对象以及处理该事件所需要的其它 各种信息(如鼠标点击时的坐标等),这些有效信息 被封装在类AWTEvent或其子类的实例对象中。

事件源:事件源回答事件是由谁发生的,也就是事 件发生的场所或者来源,通常是组件的对象,例如按钮JButton、下拉框JComboBox、列表框JList、 树JTree等。

事件监听器:事件监听器主要回答当某个事件发生 由谁处理以及怎么处理。一旦注册完成一个事件监听器,它将能接受事件对象并进行处理。

比如 点击按钮,弹出HelloWord

那么 事件是 点击按钮 ,事件源就是按钮,事件处理器就会弹出对话框,显示HelloWord.

常用的事件(Event) 有:

**所有事件类均在java.awt.event包中 **

  • 鼠标事件(MouseEvent: 鼠标按下,移入,移除,滚轮..)

  • 键盘事件(KeyEvent: 键盘按下,释放..)

  • 动作事件( ActionEvent:当按钮、菜单项被点击,在JTextField中按Enter键时...触发该事件。)按钮添加接收器, 不同的事件,接收器不同.

ActionEvent 那么他的接收器是ActionListener

KeyEvent 那么他的接收器就是KeyListener

每种类型的事件,都定义了相应的事件处理(监听器)接口,

其命名规则是XXXEvent事件对应的事件处理(监听器)接口通常命名为XXXListener

常用事件接口与对应方法

 

***要编写一个完整的事件处理程序,通常包含如下四部分的内容: *** ①引入系统事件类包:

import java.awt.event.* 

②自定义事件处理类,即加上implements XXXListener, 如:

public class MyFrame implements ActionListener { … }

③注册事件源对象的监听者,即告诉程序一旦发生相应的事件后,由谁处理,如:

public class MyFrame extends JFrame implements ActionListener{ 
  MyFrame(String sTitle){ 
    super(sTitle);
    JButton btn=new JButton("确定"); …
    btn.addActionListener (this); … 
  }
}

这个例子中,btn.addActionListener(this)即注册监听者,它相当于宣布一旦发生点击事件(ActionEvent,对应的事件监听器接口为 ActionListener,而MyFrame已经implements了该接口)由this处理,this即为MyFrame。

④注册了监听者还不能响应相应的事件,还需要实现监 听器接口中的所有方法。例如,在上例中,需加入如下 代码:

//实现ActionListener接口中的方法 
public void actionPerformed(ActionEvent e) { ...//响应某个动作的代码... }

布局管理器

除了BoxLayout位于javax.swing包中,其余5种布局管理器均位于java.awt包中。

FlowLayout 流式布局

  • 是一种最基本的布局管理器
  • 是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式
  • 在容器中,从左到右依次放置GUI组件
  • 当组件排到容器一行的末尾时,则从下一行开始接着 排列组件
  • 每行组件的对齐方式可以是: 左对齐、中间(默认对齐 方式)和右对齐

BorderLayout 边界布局

  • 将容器分为5个区域
  • NORTH 顶部 SOUTH 底部 WEST ESAST CENTE
  • 是容器JFrame和JApplet的默认布局方式
  • 每个区域最多只能1个组件

BoxLayout 盒式布局管理器(了解)

  • 创建一个将沿给定轴放置组件的布局管理器。

    BoxLayout(Container target, int axis)

BoxLayout.X_AXIS:指定组件应该从左到右放置

BoxLayout.Y_AXIS:指定组件应该从上到下放置

GridLayout 网格布局

  • 布局管理器GridLayout按行与列将容器等分成网格
    • 每个组件占用具有相同宽度和高度的网格
    • 添加组件占用网格的顺序: 从上到下,从左到右
    • 当一行满了,则继续到下一行,仍然是从左到右

CardLayout 卡片布局(了解)

  • 一个组件压在另一个组件的上面,所以每次一般只能看 到一个组件

GridBagLayout 网格包布局(了解)

  • GridBagLayout是AWT包中提供的最灵活、最 复杂的布局管理器。

  • GridBagLayout将组件以多行多列放置,允许 指定的组件跨多行或多列。

  • 每个 GridBagLayout 对象保留一个动态的矩形 单元网格,每个组件占用一个或多个单元,称 为它的显示区域。

  • 每个由一个网格包布局管理的组件都与一个 GridBagConstraints的实例相关,它指定了组件 在它的显示区域是如何放置的

容器变化时,布局的变化规律

  • FlowLayout:容器大小发生变化,组件的大小不变,但是相对位置会发生变化。
  • BorderLayout, GridLayout:容器的大小发生变化, 组件的相对位置不变,大小发生变化。
  • BoxLayout:容器的大小发生变化时,组件占用的空间不会发生变化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值