AWT的Container容器


前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1

Container容器是一种用于封装、部署和运行应用程序的轻量级虚拟化技术,它提供了隔离的运行环境,使得应用程序可以在不同的操作系统和环境中一致地运行。


一、Container继承体系

在这里插入图片描述

简介

AWT(Abstract Window Toolkit)中的Container是一个特殊的Component,代表一种容器,可以盛装普通的Component12。Container的继承体系在AWT编程中扮演着重要角色。

首先,所有的AWT编程相关的类都放在java.awt包以及它的子包中。在AWT编程中,有两个基类:ComponentMenuComponentComponent代表一个能以图形化方式显示出来,并可与用户交互的对象,例如Button代表一个按钮,TextField代表一个文本框等;而MenuComponent则代表图形界面的菜单组件,包括MenuBar(菜单条)、MenuItem(菜单项)等子类。

Container作为容器根类,它本身及其子类可以进一步细分。按照是否可以独立存在,容器可以分为两大类:

  1. 可独立存在的容器,如Window类。Window是一个可以独立存在的顶级窗口,其子类包括Frame和Dialog。Window默认使用BorderLayout来管理其内部组件的布局。
  2. 不可独立存在的容器,如Panel类和ScrollPane类。这些容器不能独立存在,必须内嵌在其他容器中使用。例如,Panel可以容纳其他组件,但它不能独立存在,必须嵌入到其他容器中。Panel默认使用FlowLayout来管理其内部组件的布局。而ScrollPane是一个带滚动条的容器,它也不能独立存在,默认使用BorderLayout来管理其内部组件布局。

在Container的继承体系中,各个容器类通过提供不同的布局管理方式和组件容纳能力,使得开发者能够灵活地构建出复杂的图形用户界面(GUI)应用。这些容器类及其子类和方法的使用,是AWT编程中构建GUI的关键部分。

请注意,由于AWT是基于本地操作系统提供的图形库进行工作的,因此不同操作系统上的AWT应用可能会有所差异,这是为了实现“一次编写,到处运行”的概念而做的妥协。

图解

在这里插入图片描述

  • Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;
  • ​ Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;
  • ​ ScrollPane 是 一个带滚动条的容器,它也不能独立存在,默认使用 BorderLayout 管理其内部组件布局;

二、常见API

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。

方法签名方法功能
setLocation(int x, int y)设置组件的位置。
setSize(int width, int height)设置组件的大小。
setBounds(int x, int y, int width, int height)同时设置组件的位置、大小。
setVisible(Boolean b):设置该组件的可见性。

Container作为容器根类,提供了如下方法来访问容器中的组件

方法签名方法功能
Component add(Component comp)向容器中添加其他组件 (该组件既可以是普通组件,也可以 是容器) , 并返回被添加的组件 。
Component getComponentAt(int x, int y):返回指定点的组件 。
int getComponentCount():返回该容器内组件的数量 。
Component[] getComponents():返回该容器内的所有组件 。

Component类的部分成员方法

方法描述
getFont()获得组件的字体
getBackground()获得组件的背景色
getForeground()获得组件的前景色
getName()获得组件的名字
getSize()获得组件的大小
paint(Graphics g)绘制组件
setBackground()设置组件的背景色
setForeground()设置组件的前景色
setFont(Font f)设置组件的字体
setName(String name)设置组件的名字
setSize(Dimension d)设置组件的大小
setVisible(Boolean b)设置组件的可见性

三、容器演示

窗口容器(Frame)

一般情况下,GUI 程序至少包含一个窗体,它和所容纳的组件一起构成应用程序的交互界面。在AWT 中,通过 Frame 类实例化窗体对象;默认情况下,得到的窗体既没有大小,也是不可见的;所以必须调用窗体对象的setSize()方法设置大小,调用窗体对象的setVisible()方法设置可见性。

Frame 类的构造方法主要有4种重载形式,如表所示

Frame类的构造方法

构造方法描述
Frame()实例化一个无标题的窗体
Frame(GraphicsConfiguration gc)使用指定的 GraphicsConfiguration 实例化一个无标题的窗体
Frame(String title)实例化一个指定标题的窗体
Frame(String title, GraphicsConfiguration gc)使用指定的 GraphicsConfiguration 实例化一个指定标题的窗体
import java.awt.*;
public class test
{
    public static void main(String[] args)
    {
        Frame frame = new Frame("这是一个窗口容器");//创建窗口对象

        frame.setBounds(100,100,500,300);//设置窗口大小

        frame.setVisible(true);//设置窗口可见
    }
}

这段代码演示了如何使用AWT创建一个基本的窗口容器。下面是对代码的解释:

  1. import java.awt.*;:这是导入AWT包中的所有类和接口,以便在代码中使用AWT的类和方法。

  2. public class test:这是声明一个名为test的公共类,用于存放主方法和创建窗口容器。

  3. public static void main(String[] args):这是主方法,是程序的入口点。

  4. Frame frame = new Frame("这是一个窗口容器");:这是创建一个Frame对象,作为窗口容器。通过构造方法传入一个字符串参数作为窗口的标题。

  5. frame.setBounds(100,100,500,300);:这是设置窗口的位置和大小。setBounds方法接受四个参数,分别是窗口左上角的x坐标、y坐标,以及窗口的宽度和高度。

  6. frame.setVisible(true);:这是设置窗口的可见性。将参数设置为true表示窗口可见,将会显示在屏幕上。

整个代码的功能是创建一个带有标题栏的窗口容器,位置在屏幕的(100,100),大小为宽度500和高度300。最后通过设置窗口可见,使窗口显示在屏幕上。

在这里插入图片描述

面板容器(Panel)

面板是一种特殊的容器,没有边框,不能独立存在和显示,必须作为组件添加到其他容器中:与窗体容器的特性不同。它的功能就是利用既是组件又是容器的特点,对其他组件进行分组放置。在AWT中,通过 Panel 类实例化面板对象。调用面板对象的 add()方法将有关联的组件添加到面板上,实现组件的分组;然后,该面板对象作为其他容器对象的 add()方法的参数,放置到其他容器中。

Panel类的构造方法

Panel类的构造方法主要有如表 所列举的两种重载形式。
Panel的默认布局是流式布局(FlowLayout),即从左到右依次排列组件,当宽度不足时自动换行。默认情况下,Panel不会随窗口大小改变而改变大小和位置。

构造方法描述
Panel()使用默认的布局管理器实例化面板
Panel(LayoutManager layout)使用指定的布局管理器实例化面板
import java.awt.*;
public class test
{
    public static void main(String[] args)
    {
        //创建frame容器对象
        Frame frame = new Frame("测试Panel");
        //创建Panel容器对象
        Panel panel = new Panel();
        //往Panel添加组件
        panel.add(new TextField("测试文本"));
        panel.add(new Button("测试按钮"));
        //把Panel添加到Frame框架中
        frame.add(panel);
        //设置框架的大小
        frame.setBounds(30,30,500,500);
        //设置框架可见
        frame.setVisible(true);
    }
}

这段代码演示了如何使用AWT创建一个容器继承体系,包括Frame和Panel。下面是对代码的解释:

  1. import java.awt.*;:这是导入AWT包中的所有类和接口,以便在代码中使用AWT的类和方法。

  2. public class test:这是声明一个名为test的公共类,用于存放主方法和创建容器。

  3. public static void main(String[] args):这是主方法,是程序的入口点。

  4. Frame frame = new Frame("测试Panel");:这是创建一个Frame对象,作为主容器。通过构造方法传入一个字符串参数作为窗口的标题。

  5. Panel panel = new Panel();:这是创建一个Panel对象,作为子容器。Panel是一个轻量级容器,用于存放其他组件。

  6. panel.add(new TextField("测试文本"));:这是往Panel容器中添加一个TextField组件,用于显示和输入文本。

  7. panel.add(new Button("测试按钮"));:这是往Panel容器中添加一个Button组件,用于触发事件。

  8. frame.add(panel);:这是把Panel容器添加到Frame框架中,作为Frame的子容器。

  9. frame.setBounds(30,30,500,500);:这是设置Frame框架的位置和大小。setBounds方法接受四个参数,分别是窗口左上角的x坐标、y坐标,以及窗口的宽度和高度。

  10. frame.setVisible(true);:这是设置Frame框架的可见性。将参数设置为true表示窗口可见,将会显示在屏幕上。

整个代码的功能是创建一个带有标题栏的窗口容器Frame,并在Frame中添加一个Panel容器作为子容器,Panel中包含一个TextField和一个Button组件。最后通过设置窗口可见,使窗口显示在屏幕上。

在这里插入图片描述
由于IDEA默认使用utf-8进行编码,但是当前我们执行代码是是在windows系统上,而windows操作系统的默认编码是gbk,所以会乱码,如果出现了乱码,那么只需要在运行当前代码前,设置一个jvm参数 -Dfile.encoding=gbk即可。

import java.awt.*;
public class test
{
    public static void main(String[] args)
    {
        System.setProperty("file.encoding", "gbk");
        //创建frame容器对象
        Frame frame = new Frame("测试Panel");
        //创建Panel容器对象
        Panel panel = new Panel();
        //往Panel添加组件
        panel.add(new TextField("测试文本"));
        panel.add(new Button("测试按钮"));
        //把Panel添加到Frame框架中
        frame.add(panel);
        //设置框架的大小
        frame.setBounds(30,30,500,500);
        //设置框架可见
        frame.setVisible(true);
    }
}

ScrollPane

import java.awt.*;

public class test {
    public static void main(String[] args) {
        // 创建窗口对象
        Frame frame = new Frame("测试ScrollPane");
        // 创建scroll pane对象,并指定默认有滚动条
        ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
        // 往ScrollPane添加组件
        scrollPane.add(new TextField("测试文本"));
        scrollPane.add(new Button("测试按钮"));
        // 将scorllpane添加到frame框架中
        frame.add(scrollPane);
        // 设置框架的大小
        frame.setBounds(30, 30, 500, 300);
        // 设置框架可见
        frame.setVisible(true);
    }
}

这段代码演示了如何使用AWT创建一个带有滚动条的ScrollPane容器。

下面是对代码的解释:

  1. import java.awt.*;:这是导入AWT包中的所有类和接口,以便在代码中使用AWT的类和方法。

  2. public class test:这是声明一个名为test的公共类,用于存放主方法和创建容器。

  3. public static void main(String[] args):这是主方法,是程序的入口点。

  4. Frame frame = new Frame("测试ScrollPane");:这是创建一个Frame对象,作为主容器。通过构造方法传入一个字符串参数作为窗口的标题。

  5. ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);:这是创建一个ScrollPane对象,并指定默认有垂直和水平滚动条。ScrollPane.SCROLLBARS_ALWAYS表示始终显示垂直和水平滚动条,即使内容没有溢出。

  6. scrollPane.add(new TextField("测试文本"));:这是往ScrollPane容器中添加一个TextField组件,用于显示和输入文本。

  7. scrollPane.add(new Button("测试按钮"));:这是往ScrollPane容器中添加一个Button组件,用于触发事件。

  8. frame.add(scrollPane);:这是把ScrollPane容器添加到Frame框架中,作为Frame的子容器。

  9. frame.setBounds(30,30,500,300);:这是设置Frame框架的位置和大小。setBounds方法接受四个参数,分别是窗口左上角的x坐标、y坐标,以及窗口的宽度和高度。

  10. frame.setVisible(true);:这是设置Frame框架的可见性。将参数设置为true表示窗口可见,将会显示在屏幕上。

整个代码的功能是创建一个带有滚动条的ScrollPane容器,并在ScrollPane中添加一个TextField和一个Button组件。最后通过设置窗口可见,使窗口显示在屏幕上。
在这里插入图片描述
程序明明向 ScrollPane 容器中添加了 一个文本框和一个按钮,但只能看到 一个按钮,却看不到文本框 ,这是为什么 呢?这是因为ScrollPane 使用 BorderLayout 布局管理器的缘故,而 BorderLayout 导致了该容器中只有一个组件被显示出来 。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲜于言悠905

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值