前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AWT的Container容器

AWT的Container容器

作者头像
鲜于言悠
发布2024-06-14 08:48:13
1090
发布2024-06-14 08:48:13
举报
文章被收录于专栏:c/c++的学习笔记

前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 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 实例化一个指定标题的窗体

代码语言:javascript
复制
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)

使用指定的布局管理器实例化面板

代码语言:javascript
复制
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即可。

代码语言:javascript
复制
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

代码语言:javascript
复制
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 导致了该容器中只有一个组件被显示出来 。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、Container继承体系
    • 简介
      • 图解
      • 二、常见API
      • 三、容器演示
        • 窗口容器(Frame)
          • Frame类的构造方法
        • 面板容器(Panel)
          • Panel类的构造方法
        • ScrollPane
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档