Java图形界面编程 AWT-容器篇

发布于:2024-12-18 ⋅ 阅读:(166) ⋅ 点赞:(0)

前言

Container 是 Java AWT 中的一个非常重要的类,它用于容纳其他组件。几乎所有能够容纳子组件的容器类都继承自 `Container` 类。容器的功能是将多个组件(如按钮、标签、文本框等)组织在一起,并提供布局管理和事件处理功能。

下面将详细介绍 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

 

 1. java.awt.Component
 

 - Component是所有 AWT 组件的基类。它提供了对组件的基本操作,如位置、大小、绘制、事件等。
   - Container 类继承自 Component,因此容器也是一个组件,具有与其他组件相同的基本操作。

2. java.awt.Container

   - Container是 AWT 中所有容器类的基类,提供了对容器的管理功能。它的关键功能包括:管理子组件、设置布局、添加事件监听器等。
   - 主要方法

  • add(Component comp):将子组件添加到容器中。
  • remove(Component comp):移除容器中的子组件。
  • setLayout(LayoutManager mgr):设置容器的布局管理器。
  • getLayout():获取容器当前使用的布局管理器。
  • getComponent(int index):获取容器中指定索引位置的子组件。

 3. java.awt.Panel

   - 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"));

4. java.awt.Window
 

 - Window 类继承自 `Container`,它表示一个顶级窗口,通常用于创建顶级的窗口(如 `Frame` 或 `Dialog`)。`Window` 主要用于显示顶级窗口(如应用的主窗口或对话框)。
   - Window提供了显示和管理窗口的功能。大多数应用程序使用 Frame 或 Dialog 来显示顶级窗口,这两个类都直接或间接继承自 Window。
   - 关键方法:
     - setVisible(boolean b):控制窗口是否可见。
     - setSize(int width, int height):设置窗口的大小。

 5. java.awt.Frame
 

 - Frame 是 Window的子类,表示一个具有标题栏、菜单栏和边框的窗口。它通常用于应用程序的主窗口。
   - Frame 类是一个顶级窗口,可以包含菜单、工具栏、按钮、文本框等组件。
   - 关键方法:
     - setTitle(String title):设置窗口的标题。
     - setMenuBar(MenuBar mb):设置菜单栏。

   
   
   
  Frame frame = new Frame("主窗口");
  frame.setSize(300, 200);
  frame.setVisible(true);
   

6. java.awt.Dialog
 

 - Dialog 是 `Window` 的子类,用于创建弹出式对话框,通常用于显示提示、确认或输入信息。
   - Dialog 是一个独立的窗口,通常是临时的,用户可以在对话框中进行操作,然后关闭对话框。
   - 关键方法:
     - setTitle(String title)`:设置对话框的标题。
     - setModal(boolean b)`:设置对话框是否为模态对话框。

  
 

  Dialog dialog = new Dialog(frame, "对话框", true);
   dialog.setSize(200, 150);
   dialog.setVisible(true);


 

7. java.awt.ScrollPane
 

 - 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 应用程序,特别是在处理复杂布局和组件时。