Container 是 Java AWT 中的一个非常重要的类,它用于容纳其他组件。几乎所有能够容纳子组件的容器类都继承自 `Container` 类。容器的功能是将多个组件(如按钮、标签、文本框等)组织在一起,并提供布局管理和事件处理功能。 下面将详细介绍 Container的继承体系,以及常见的 Container子类。
Container类是 AWT 中所有容器类的基类。它继承自 Component`类,因此所有容器本质上也是一个组件。容器本身通常不会单独显示,而是通过管理和显示其他组件来显示界面。Container主要提供了添加子组件、布局管理、事件监听等功能。
以下是 Container类的继承体系:
java.lang.Object | java.awt.Component | java.awt.Container / | \ java.awt.Panel java.awt.Window java.awt.ScrollPane | java.awt.Frame | java.awt.Dialog
- Component是所有 AWT 组件的基类。它提供了对组件的基本操作,如位置、大小、绘制、事件等。 - Container 类继承自 Component,因此容器也是一个组件,具有与其他组件相同的基本操作。
- Container是 AWT 中所有容器类的基类,提供了对容器的管理功能。它的关键功能包括:管理子组件、设置布局、添加事件监听器等。 - 主要方法
add(Component comp):将子组件添加到容器中。remove(Component comp):移除容器中的子组件。setLayout(LayoutManager mgr):设置容器的布局管理器。getLayout():获取容器当前使用的布局管理器。getComponent(int index):获取容器中指定索引位置的子组件。- Panel是 Container`类的子类,表示一个没有边框的面板容器,常用于将多个组件组织在一起。面板通常用于创建复杂的 UI 布局。 - Panel不能单独显示,但可以用作其他容器(如 Frame)的子容器。 - 关键方法: - setLayout(LayoutManager mgr):设置面板的布局管理器。
Panel panel = new Panel();
panel.setLayout(new FlowLayout());
panel.add(new Button("按钮1"));
panel.add(new Button("按钮2"));- Window 类继承自 `Container`,它表示一个顶级窗口,通常用于创建顶级的窗口(如 `Frame` 或 `Dialog`)。`Window` 主要用于显示顶级窗口(如应用的主窗口或对话框)。 - Window提供了显示和管理窗口的功能。大多数应用程序使用 Frame 或 Dialog 来显示顶级窗口,这两个类都直接或间接继承自 Window。 - 关键方法: - setVisible(boolean b):控制窗口是否可见。 - setSize(int width, int height):设置窗口的大小。
- Frame 是 Window的子类,表示一个具有标题栏、菜单栏和边框的窗口。它通常用于应用程序的主窗口。 - Frame 类是一个顶级窗口,可以包含菜单、工具栏、按钮、文本框等组件。 - 关键方法: - setTitle(String title):设置窗口的标题。 - setMenuBar(MenuBar mb):设置菜单栏。 Frame frame = new Frame("主窗口"); frame.setSize(300, 200); frame.setVisible(true);
- Dialog 是 `Window` 的子类,用于创建弹出式对话框,通常用于显示提示、确认或输入信息。 - Dialog 是一个独立的窗口,通常是临时的,用户可以在对话框中进行操作,然后关闭对话框。 - 关键方法: - setTitle(String title)`:设置对话框的标题。 - setModal(boolean b)`:设置对话框是否为模态对话框。
Dialog dialog = new Dialog(frame, "对话框", true);
dialog.setSize(200, 150);
dialog.setVisible(true);- ScrollPane 是 Container的子类,表示一个具有滚动条的容器。它通常用于包含内容较多的区域,提供垂直和/或水平滚动条。 - 它可以容纳任何组件,并允许在内容超过视窗时滚动查看。 - 关键方法: - `setPreferredSize(Dimension d)`:设置 `ScrollPane` 的首选大小。 - `setViewportView(Component view)`:设置显示区域的组件。
ScrollPane scrollPane = new ScrollPane();
scrollPane.add(new Button("按钮"));
frame.add(scrollPane);可能部分代码设计后面的内容,不过在第一篇我们也提到了很多组件。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class frame {
public static void main(String[] args) {
Frame fr= new Frame("Frame");
/*fr.setLocation(100,100);
fr.setSize(500,500);*/
fr.setBounds(100,100,500,500);
//Panel p1=new Panel();
ScrollPane p1=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);//滚动面板,滚动条一直显示
//此时只能看到按钮,因为默认布局管理器的影响
p1.add(new TextField("这是一个文本框"));
p1.add(new Button("这是一个按钮"));
fr.add(p1);
fr.setVisible(true);
fr.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}dialog
import javax.swing.*;
import java.awt.*;
public class dialog {
public static void main(String[] args) {
Frame fr=new Frame("对话框");
Dialog d1=new Dialog(fr,"模式对话框",true);
Dialog d2=new Dialog(fr,"非模式对话框",false);
d1.setSize(200,200);
d2.setSize(200,200);
Button b1=new Button("打开模式对话框");
Button b2=new Button("打开非模式对话框");
Box hbox= Box.createVerticalBox();
hbox.add(new TextField());
hbox.add(new Button("确认"));
d1.add(hbox);
b1.addActionListener(e->{
d1.setVisible(true);
});
b2.addActionListener(e->{d2.setVisible(true);});
fr.add(b1,BorderLayout.NORTH);
fr.add(b2, BorderLayout.SOUTH);
fr.pack();
fr.setVisible(true);
}
}`Container` 类是 AWT 中所有容器类的基类,提供了对容器的基本管理功能,允许将子组件添加到容器中并进行布局管理。通过继承 Container类,Java 提供了多个容器类,如 Panel、Frame、Dialog、ScrollPane`等,开发者可以灵活地使用这些容器类来组织和管理应用程序的 UI 组件。
理解 AWT 容器的继承体系有助于更好地设计和构建 GUI 应用程序,特别是在处理复杂布局和组件时。