Bootstrap

Java基础-组件及事件处理(中)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

BorderLayout布局管理器

说明:

示例:

FlowLayout布局管理器

说明:

示例:

GridLayout布局管理器 

说明:

示例:

事件处理机制

什么是事件?

事件的类型

什么是事件处理? 

事件处理所涉及的步骤 

回调方法

Swing常用事件处理

SWING 事件类

EventObject 类

类声明

字段 

类构造函数

类方法 


BorderLayout布局管理器

说明:

BorderLayout 将容器分为 EAST 、 SOUTH 、 WEST 、 NORTH 、 CENTER五个区域,普通组件可以被放置在这 5 个区域的任意一个中 。 BorderLayout布局 管理器的布局示意图如图所示 

向BorderLayouti布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。


参数comp表示要添加的组件,constraints指定将组件添加到布局中的位置,它是一个Object类型。


传参时可以使用BorderLayout类提供的5个常量设置组件位置,它们分别是EAST 、 SOUTH 、 WEST 、 NORTH 、 CENTER

BorderLayout的好处就是可以限定各区域的边界,当用户改变容器窗口大小时,各个组件的相对位置不变。


向BorderLayout的布局管理器添加组件时,如果不指定添加到哪个区域,默从添加到CENTER区域。


每个区域只能放置一个组件,如果向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。

示例:

import java.awt.*;

public class BorderLayoutDemo1 {

    public static void main(String[] args) {
        //1.创建Frame对象
        Frame frame = new Frame("这里测试BorderLayout");
        //2.指定Frame对象的布局管理器为BorderLayout
        frame.setLayout(new BorderLayout(30,5));
        //3.往Frame指定东南西北中各添加一个按钮组件
        frame.add(new Button("东侧按钮"), BorderLayout.EAST);
        frame.add(new Button("西侧按钮"), BorderLayout.WEST);
        frame.add(new Button("南侧按钮"), BorderLayout.SOUTH);
        frame.add(new Button("北侧按钮"), BorderLayout.NORTH);
        frame.add(new Button("中间按钮"), BorderLayout.CENTER);
        //4.设置Frame为最佳大小
        frame.pack();
        //5.设置Frame可见
        frame.setVisible(true);
    }
}

FlowLayout布局管理器

说明:

FlowLayout(流式布局管理器)是最简单的布局管理器。


在这种布局下,容器会将组件按照添加顺序从左向右放置,当到达容器的边界时,会自动将组件放到下一行的开始位置。


这些组件可以按左对齐、居中对齐(默认方式)或右对齐的方式排列。

参数ag决定组件在每行中相对于容器边界的对齐方式,分别为左对齐、右对齐、居中对齐。


对齐方式可以使用该类中提供的常量FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout..CENTER表示。


参数hgap和参数vgap分别设定组件之间的水平和垂直间距,可以填入一个任意数值。

示例:

import java.awt.*;

public class FlowLayoutDemo {

    public static void main(String[] args) {
        //1.创建Frame对象
        Frame frame = new Frame("这里测试FlowLayout");
        //2.修改Frame容器的布局管理器为FlowLayout
        frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));

        //3.往Frame中添加100个button
        for (int i = 0; i < 100; i++) {
            frame.add(new Button("按钮"+i));
        }

        //4.设置Frame为最佳大小
        frame.pack();
        //5.设置Frame可见
        frame.setVisible(true);
    }
}

GridLayout布局管理器 

说明:

GridLayout 布局管理器将容器分割成纵横线分隔的网格 , 每个网格所占的区域大小相同。当向使用 GridLayout 布局管理器的容器中添加组件时, 默认从左向右、 从上向下依次添加到每个网格中 。 与 FlowLayout不同的是,放置在 GridLayout 布局管理器中的各组件的大小由组件所处的区域决定(每 个组件将自动占满整个区域) 。

GridBagLayout 布局管理器的功能最强大 , 但也最复杂,与 GridLayout 布局管理器不同的是, 在GridBagLayout 布局管理器中,一个组件可以跨越一个或多个网格 , 并可以设置各网格的大小互不相同,从而增加了布局的灵活性 。 当窗口的大小发生变化时 , GridBagLayout 布局管理器也可以准确地控制窗口各部分的拉伸 。

由于在GridBagLayout 布局中,每个组件可以占用多个网格,此时,我们往容器中添加组件的时候,就需要具体的控制每个组件占用多少个网格,java提供的GridBagConstaints类,与特定的组件绑定,可以完成具体大小和跨越性的设置。

示例:

import java.awt.*;

public class GridLayoutDemo{

    public static void main(String[] args) {

        //1.创建Frame对象,并且标题设置为计算器
        Frame frame = new Frame("计算器");

        //2.创建一个Panel对象,并且往Panel中放置一个TextField组件
        Panel p1 = new Panel();
        p1.add(new TextField(30));

        //3.把上述的Panel放入到Frame的北侧区域
        frame.add(p1,BorderLayout.NORTH);

        //4.创建一个Panel对象,并且设置其布局管理器为GridLayout
        Panel p2 = new Panel();
        p2.setLayout(new GridLayout(3,5,4,4));

        //5.往上述Panel中,放置15个按钮,内容依次是:0,1,2,3,4,5,6,7,8,9,+,-,*,/,.
        for (int i = 0; i < 10; i++) {
            p2.add(new Button(i+""));
        }
        p2.add(new Button("+"));
        p2.add(new Button("-"));
        p2.add(new Button("*"));
        p2.add(new Button("/"));
        p2.add(new Button("."));

        //6.把上述Panel添加到Frame的中间区域中国
        frame.add(p2);
        //7.设置Frame为最佳大小
        frame.pack();

        //8.设置Frame可见
        frame.setVisible(true);

    }
}

 

事件处理机制

什么是事件?

改变对象的状态被称为事件,即事件描述源的状态变化。事件产生用户与图形用户界面组件交互的结果。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面都是导致一个事件发生的活动。

事件的类型

事件可以大致分为两类::

  • 前台事件 - 这些事件需要用户的直接互动。它们是由在图形用户界面中人与图形组件交互的结果而产生的。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面等。

  • 后台事件 - 这些事件需要最终用户的交互,它们被称为后台事件。操作系统的中断,硬件或软件故障,计时器过期,操作完成都是后台事件的例子

什么是事件处理? 

事件处理是一种机制,如果一个事件发生时,它控制该事件,并且决定应该会发生什么。这种机制具有被称为事件处理程序的代码,当一个事件发生时,它是可执行的。Java 使用代理事件模型来处理事件。该模型定义了标准的机制来生成和处理事件。让我们来简要介绍这个模型。

代理事件模型具有下列主要参与者,即:

  •  - 源是一个对象,事件发生在该对象上。源负责提供发生事件的信息给它的处理器。Java 提供源对象的类。

  • 监听器 - 它也被称为作为事件处理。监听器负责产生对一个事件的响应。从 Java 实现的角度来看,监听器也是一个对象。监听器等待直到它接收到一个事件。一旦收到该事件,监听器进程的事件就返回。

这种方法的好处是,用户界面逻辑完全从生成事件的逻辑中分开。用户界面元素能够把事件的处理委派给一段单独的代码。在这个模型中,监听器需要用源对象注册,以便监听器能够接收事件通知。这是一个有效的处理事件的方式,因为这些事件通知只发送给那些想要接收它们的监听器。

事件处理所涉及的步骤 

  • 用户单击按钮,然后生成事件。

  • 现在有关事件类的对象是自动创建的,源和事件的信息在同一对象得到填充。

  • 事件对象被转发到注册监听器类的方法中。

  • 该方法现在得到执行并且返回。

有关监听器要记住的要点:

  • 为了设计一个监听器类,我们必须开发一些监听器接口。这些监听器接口预测一些公共的抽象回调方法,这些方法必须由监听器类来实现。

  • 如果你没有实现任何预定义的接口,那么你的类不能作为源对象的监听器类。

回调方法

这些方法由 API 提供者来提供,由应用程序员来定义,并且由应用程序开发者来调用。这里的回调方法代表一个事件方法。响应一个事件 java jre 将触发回调方法。所有这些回调方法在监听器接口中被提供。

如果一个组件需要一些监听器监听它的事件,源必须自己注册给监听器。

Swing常用事件处理

SWING 事件类

事件类代表事件。Java 提供各种事件类,但是我们将讨论更频繁使用的那些事件类。

EventObject 类

它是派生所有事件状态对象的根类。所有事件都是用对象,的引用来构造的,即逻辑上认为是问题最初发生的事件的对象。这个类定义在 java.util 包中。

类声明

下面是 java.util.EventObject 类的声明:

public class EventObject
   extends Object
      implements Serializable

字段 

下面是 java.util.EventObject 类的字段:

  • protected Object source –- 事件最初发生的对象。

类构造函数

类方法 


                
      
;