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

AWT的Container容器

作者头像
鲜于言悠
发布于 2024-06-14 00:48:13
发布于 2024-06-14 00:48:13
14900
代码可运行
举报
文章被收录于专栏:c/c++的学习笔记c/c++的学习笔记
运行总次数:0
代码可运行

前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
Linux常用命令:文件与目录
訾博ZiBo
2025/01/06
1460
学习笔记0316----linux基本命令(一)
/boot/ 系统启动目录; /sys/ 系统内核相关目录; /proc/ 系统进程目录; /run/ 系统产生临时文件目录; /bin/ 用户命令目录 /sbin/ root用户命令目录 /lib/ 库目录 /lib64/ 库目录,配置文件目录 /media/ 媒体挂载目录 /mnt/ 临时挂载目录
嘻哈记
2022/01/11
1.6K0
学习笔记0316----linux基本命令(一)
Linux基础(day8)
2.14 文件和目录权限chmod 文件属性 [root@localhost ~]# ls -l 总用量 12 -rw-r--r--. 1 root root 0 10月 25 16:06 1.txt -rw-------. 1 root root 1422 10月 21 00:17 anaconda-ks.cfg -rw-r--r--. 1 root root 0 10月 25 16:06 1.txt -表示文件的类型,rw-r--r--后面的九位,表示文件的权限 r (read)表示可
运维小白
2018/02/06
1.1K0
文件管理基础命令
命令与文件补全:在Bash(sh)中命令与文件补全是非常方便与常用的功能我们只要在输入命令或文件时,按Tab键就会自动进行补全 Linux命令书写规范:一条完整的linux基本由两部分组成,命令和参数,命令和参数之间用空格隔开,并用”-“或者”–“连接
全栈工程师修炼指南
2022/09/28
1.3K0
文件管理基础命令
Linux 系统下查找文件命令
Linux 系统下查找文件命令,融合多部Linux经典著作,去除多余部分,保留实用部分。
王瑞MVP
2022/12/28
4.6K0
Linux基础(day9)
这drwxrwxrwt.里面的t(t里面包含x权限),就是stick_bit权限,
运维小白
2022/01/06
7980
掌握Linux文件权限,看这篇就够了
#前言 我们知道,无论什么东西,涉及到安全性的,比如文件、文件夹、磁盘(就如window系统的磁盘,我们就可以通过bitlocker技术将磁盘给加密锁起来)、服务器,等都需要设置权限管理,以保证安全性,接下来让我们来探讨以下Linux的文件权限。
老油条IT记
2020/09/04
2.6K0
掌握Linux文件权限,看这篇就够了
Linux——(关于权限常见的3个问题)
总结 1.x决定是否可以进入目录 2.r决定是否可以进行对文件属性信息进行查看的权力 3.w决定是否可以在目录下新建和删除文件
Yui_
2024/10/15
1680
Linux——(关于权限常见的3个问题)
rsync 服务部署详解
本文介绍了如何使用Rsync进行文件同步,并基于CentOS 7服务器进行了实例演示。首先介绍了Rsync的命令行参数和配置文件选项,然后通过配置文件指定了同步目录。接着,演示了如何通过Rsync进行增量备份和排除备份目录。最后,总结了Rsync的权限配置问题和常见错误。
惨绿少年
2017/12/27
2.2K0
rsync 服务部署详解
2 Linux 基础命令
cd 路径/目录名称:这个命令将当前目录更改为提交的路径。例如:cd home/user/documents将切换到 documents目录。
Lemon黄
2023/11/27
2000
2 Linux 基础命令
linux中的15个基本ls命令示例
freestar.config.enabled_slots.push({ placementName: "tecmint_incontent", slotId: "tecmint_incontent" });
入门笔记
2022/06/02
1K0
Linux创建、编辑文件、目录管理、文件解压及删除命令整理总汇
例:$ touch hello.txt 如果 hello.txt 文件不存在,则创建文件,如果存在,则修改 hello.txt 所有的时间为当前系统的时间。
德顺
2019/11/12
3.8K0
linux下监控某个目录是否被更改
需求:对一个目录(比如/data/test)进行监控,当这个目录下文件或子目录出现变动(如修改、创建、删除、更名等操作)时,就发送邮件! 针对上面的需求,编写shell脚本如下: [root@centos6-vm01 opt]# vim file_monit.sh #!/bin/bash #此脚本用于检测linux系统重要文件是否被改动,如果改动则用邮件报警 #建议用定时任务执行此脚本,如每5分钟执行一次,也可修改此脚本用于死循环检测 #Ver:1.0 #http://www.cnblogs.com/kev
洗尽了浮华
2018/01/23
5.7K0
linux下监控某个目录是否被更改
学习笔记0328----压缩文件
压缩文件 预习内容 1. linux上的压缩文件后缀名 2. gzip(gunzip)压缩工具 2.1 gzip压缩文件,无法压缩目录 2.1.1【gzip 文件名】 压缩后源文件消失,文件名后多一个.gx 2.1.2 【gzip -c 1.txt > 1.txt.gz】压缩文件后源文件不丢失 2.1.3 【gzip -1 1.txt】gzip的压缩级别 2.2 gzip解压文件 2.2.1【gzip -d 文件名】解压文件,源文件消失 2.2.2 【gzip -d -c 3.txt.gz > 3.
嘻哈记
2022/01/11
1.9K0
企业运维经典面试题汇总(4)
1、如何过滤出已知当前目录下yangwen中的所有一级目录(提示:不包含yangwen目录下面目录的子目录及隐藏目录,即只能是一级目录)? 解答: 方法1:通过find直接查找指定类型的文件 [ro
释然IT杂谈
2020/08/25
4830
008.Linux文件目录管理命令基础
1. pwd:显示当前所在的位置 # 显示当前工作目录的绝对路径 [15:31:44 root@node00 tmp]# pwd /tmp # 如果当前目录是软链接目录,则显示软链接目录的物理路径 [15:35:54 root@node00 a]# pwd -P /tmp/a # 如果当前目录是软链接目录,还是显示逻辑路径(默认) [15:35:58 root@node00 a]# pwd -L /tmp/b/a # 使用PWD环境变量输出当前目录的绝对路径 [15:47:10 root@node00
CoderJed
2020/04/10
8830
008.Linux文件目录管理命令基础
linux学习第九篇:特殊权限set_uid,set_gid,stick_bit以及软连接文件,硬链接文件
特殊权限set_uid 权限s即为set_uid(给一个文件设置set_uid权限的前提是这个文件是二进制可执行文件) [root@xie-02 ~]# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd set_uid的作用:保证普通用户临时拥有该命令所有者root的身份 chmod u+s /usr/bin/ls   //给ls命令添加权限s,即当使用除root用户以外的用户时,有权限使用ls
用户1215343
2018/02/05
1K0
linux基础命令4
创建文件夹 # mkdir note # ll -d note/ drwxr-xr-x. 2 root root 4096 Feb 22 15:53 note/ # mkdir {1,2} #ll total 8 drwxr-xr-x. 2 root root 4096 Feb 22 15:56 1 drwxr-xr-x. 2 root root 4096 Feb 22 15:56 2 head命令 # head -1 /etc/passwd root:x:0:0:root:/root:/bin/bas
零月
2018/04/25
7440
linux基础命令4
Linux文件管理
相对路径:不以斜线开始,制定相对于当前工作目录活某目录的位置,可以作为一个简短的星矢制定一个文件名
鱼丸葱面
2020/12/09
4K0
Linux文件管理
练习题一 上
本文主要介绍了在 Linux 系统下,通过使用 cp 命令进行文件复制操作。首先介绍了 cp 命令的基本用法,然后说明了如何在 Linux 系统下进行目录复制操作。最后,讲解了 cp 命令的一些高级用法,例如复制符号链接、保持属性、复制软链接等。
惨绿少年
2017/12/27
7960
相关推荐
Linux常用命令:文件与目录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档