推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
Container容器是一种用于封装、部署和运行应用程序的轻量级虚拟化技术,它提供了隔离的运行环境,使得应用程序可以在不同的操作系统和环境中一致地运行。
AWT(Abstract Window Toolkit)中的Container是一个特殊的Component,代表一种容器,可以盛装普通的Component12。Container的继承体系在AWT编程中扮演着重要角色。
首先,所有的AWT编程相关的类都放在java.awt
包以及它的子包中。在AWT编程中,有两个基类:Component
和MenuComponent
。Component
代表一个能以图形化方式显示出来,并可与用户交互的对象,例如Button
代表一个按钮,TextField
代表一个文本框等;而MenuComponent
则代表图形界面的菜单组件,包括MenuBar
(菜单条)、MenuItem
(菜单项)等子类。
Container作为容器根类,它本身及其子类可以进一步细分。按照是否可以独立存在,容器可以分为两大类:
在Container的继承体系中,各个容器类通过提供不同的布局管理方式和组件容纳能力,使得开发者能够灵活地构建出复杂的图形用户界面(GUI)应用。这些容器类及其子类和方法的使用,是AWT编程中构建GUI的关键部分。
请注意,由于AWT是基于本地操作系统提供的图形库进行工作的,因此不同操作系统上的AWT应用可能会有所差异,这是为了实现“一次编写,到处运行”的概念而做的妥协。
BorderLayout
管理其内部组件布局;FlowLayout
管理其内部组件布局;BorderLayout
管理其内部组件布局;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) | 设置组件的可见性 |
一般情况下,GUI 程序至少包含一个窗体,它和所容纳的组件一起构成应用程序的交互界面。在AWT 中,通过 Frame 类实例化窗体对象;默认情况下,得到的窗体既没有大小,也是不可见的;所以必须调用窗体对象的setSize()
方法设置大小,调用窗体对象的setVisible()
方法设置可见性。
Frame 类的构造方法主要有4种重载形式,如表所示
构造方法 | 描述 |
---|---|
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创建一个基本的窗口容器。下面是对代码的解释:
import java.awt.*;
:这是导入AWT包中的所有类和接口,以便在代码中使用AWT的类和方法。
public class test
:这是声明一个名为test
的公共类,用于存放主方法和创建窗口容器。
public static void main(String[] args)
:这是主方法,是程序的入口点。
Frame frame = new Frame("这是一个窗口容器");
:这是创建一个Frame对象,作为窗口容器。通过构造方法传入一个字符串参数作为窗口的标题。
frame.setBounds(100,100,500,300);
:这是设置窗口的位置和大小。setBounds
方法接受四个参数,分别是窗口左上角的x坐标、y坐标,以及窗口的宽度和高度。
frame.setVisible(true);
:这是设置窗口的可见性。将参数设置为true
表示窗口可见,将会显示在屏幕上。
整个代码的功能是创建一个带有标题栏的窗口容器,位置在屏幕的(100,100),大小为宽度500和高度300。最后通过设置窗口可见,使窗口显示在屏幕上。
面板是一种特殊的容器,没有边框,不能独立存在和显示,必须作为组件添加到其他容器中:与窗体容器的特性不同。它的功能就是利用既是组件又是容器的特点,对其他组件进行分组放置。在AWT中,通过 Panel 类实例化面板对象。调用面板对象的 add()
方法将有关联的组件添加到面板上,实现组件的分组;然后,该面板对象作为其他容器对象的 add()
方法的参数,放置到其他容器中。
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。下面是对代码的解释:
import java.awt.*;
:这是导入AWT包中的所有类和接口,以便在代码中使用AWT的类和方法。
public class test
:这是声明一个名为test
的公共类,用于存放主方法和创建容器。
public static void main(String[] args)
:这是主方法,是程序的入口点。
Frame frame = new Frame("测试Panel");
:这是创建一个Frame对象,作为主容器。通过构造方法传入一个字符串参数作为窗口的标题。
Panel panel = new Panel();
:这是创建一个Panel对象,作为子容器。Panel是一个轻量级容器,用于存放其他组件。
panel.add(new TextField("测试文本"));
:这是往Panel容器中添加一个TextField组件,用于显示和输入文本。
panel.add(new Button("测试按钮"));
:这是往Panel容器中添加一个Button组件,用于触发事件。
frame.add(panel);
:这是把Panel容器添加到Frame框架中,作为Frame的子容器。
frame.setBounds(30,30,500,500);
:这是设置Frame框架的位置和大小。setBounds
方法接受四个参数,分别是窗口左上角的x坐标、y坐标,以及窗口的宽度和高度。
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);
}
}
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容器。
下面是对代码的解释:
import java.awt.*;
:这是导入AWT包中的所有类和接口,以便在代码中使用AWT的类和方法。
public class test
:这是声明一个名为test
的公共类,用于存放主方法和创建容器。
public static void main(String[] args)
:这是主方法,是程序的入口点。
Frame frame = new Frame("测试ScrollPane");
:这是创建一个Frame对象,作为主容器。通过构造方法传入一个字符串参数作为窗口的标题。
ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
:这是创建一个ScrollPane对象,并指定默认有垂直和水平滚动条。ScrollPane.SCROLLBARS_ALWAYS
表示始终显示垂直和水平滚动条,即使内容没有溢出。
scrollPane.add(new TextField("测试文本"));
:这是往ScrollPane容器中添加一个TextField组件,用于显示和输入文本。
scrollPane.add(new Button("测试按钮"));
:这是往ScrollPane容器中添加一个Button组件,用于触发事件。
frame.add(scrollPane);
:这是把ScrollPane容器添加到Frame框架中,作为Frame的子容器。
frame.setBounds(30,30,500,300);
:这是设置Frame框架的位置和大小。setBounds
方法接受四个参数,分别是窗口左上角的x坐标、y坐标,以及窗口的宽度和高度。
frame.setVisible(true);
:这是设置Frame框架的可见性。将参数设置为true
表示窗口可见,将会显示在屏幕上。
整个代码的功能是创建一个带有滚动条的ScrollPane容器,并在ScrollPane中添加一个TextField和一个Button组件。最后通过设置窗口可见,使窗口显示在屏幕上。
程序明明向 ScrollPane
容器中添加了 一个文本框和一个按钮,但只能看到 一个按钮,却看不到文本框 ,这是为什么 呢?这是因为ScrollPane
使用 BorderLayout
布局管理器的缘故,而 BorderLayout
导致了该容器中只有一个组件被显示出来 。