【AWT编写图形用户界面】GUI编程之AWT讲解(看不懂你来打我)

JDK中提供了AWT和Swing两个包,用于GUI(图形用户界面)程序的设计和开发。下面为大家介绍一下用AWT如何进行GUI编程。

1 AWT

AWT中有两个核心的类:组件和容器(Component和Container)。组件就是按钮、文本框…而容器就是一个载体,用来添加组件这些元素。
  其中容器又分为 Window 和 Panel。Window 可以显示出来,可以向里面添加按钮等组件,而 Panel 也可以添加组件,但是Panel 不能独立显示,需要添加到 Window 里才可以进行显示。 具体关系如下图

在这里插入图片描述

2 内部类和匿名类

在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】
如果想要通过一个类来使用另一个类,可以定义为内部类。【比如苹果手机类,苹果手机类中的黄金版的是特别定制的】
内部类的外部类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外部类中的方法。【不论是静态还是非静态的,内部类都可以直接调用外部类中的属性,】

class Outer{
    int a=5;
    static int b=6;
    void show() {
        System.out.println("hello world");
    }
    class Inner{
        void use() {
            System.out.println(a);//5
            System.out.println(b);//6
            show();//hello world
            
        }
    }
    void create() {
        new Inner().use();
    }

}

public class Demo {

    public static void main(String[] args) {
        new Outer().create();
        Outer.Inner oi=new Outer().new Inner();
        oi.use();

    }

}

匿名类,就是没有名称的类,其名称由Java编译器给出,一般是形如:外部类名称+$+匿名类顺序,没有名称也就是其他地方就不能引用,不能实例化,只用一次,当然也就不能有构造器。
匿名类就是利用父类的构造函数和自身类体构造成一个类。
在这里插入图片描述
在这里插入图片描述

3 Frame

Frame窗体是一个容器,是带有标题和边框的顶层窗口。

使用方法如下:

Frame frame = new Frame(“这个一个窗口”);

构造方法里面的参数用来这是窗体的标题,这个构造方法创建的 Frame 对象最初是不可见的,那么我们使用它的成员方法来设置这个窗体的各种属性,它常用的成员方法如下表所示:

在这里插入图片描述
上面代码的实例方法如下:

import java.awt.*;

public class Demo2 {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setTitle("这是一个窗口");
        frame.setResizable(true);
        frame.setVisible(true);
        frame.setBounds(100, 100, 500, 300);
        frame.setBackground(Color.pink);
        frame.setLayout(new FlowLayout());
    }
}

当你创建一个窗体后会发现关闭不了窗口,解决的方法就是使 Java 程序停止运行,这个时候我们可以对这个窗体添加一个监听事件,用来关闭窗口的事件,代码实现如下:
在java编写的过程中常常遇到样的一段代码
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);//退出系统
}
});
这个是匿名类,就相当于写了一个类,继承WindowAdapter,然后又覆盖了它其中的一部分方法,再新建这个类的一个实例,作为addWindowListener的参数~

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Demo2 {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setTitle("这是一个窗口");
        frame.setResizable(true);
        frame.setVisible(true);
        frame.setBounds(100, 100, 500, 300);
        frame.setBackground(Color.pink);
        frame.setLayout(new FlowLayout());
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);   //正常退出程序
            }
        });
    }
}

软件包 java.awt.event 的描述
提供处理由 AWT 组件所激发的各类事件的接口和类,包含用来检测并对时间做出反应的三个组成元素:源对象、监视器对象和事件对象。有关 AWT 事件模型的细节,请参见 java.awt.AWTEvent 类。事件由事件源所激发。向事件源注册的事件侦听器可接收有关特定事件类型的通知。此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写过程更为轻松的便捷类。

4 布局管理器

4.1 第一种布局管理器——FlowLayout

这种布局管理器是对组件逐行定位,行内从左到右,一行排满后进行换行,FlowLayout 默认的布局方式的居中对齐

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Demo2 {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setTitle("这是一个窗口");
        frame.setResizable(true);
        frame.setVisible(true);
        frame.setBounds(100, 100, 500, 300);
        frame.setBackground(Color.pink);
        Button button0 = new Button("button");
        Button button1 = new Button("button");
        Button button2 = new Button("button");
        frame.setLayout(new FlowLayout());
        frame.add(button0);
        frame.add(button1);
        frame.add(button2);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

在这里插入图片描述

4.2 第二种布局管理器——BorderLayout

这种布局管理器把容器分为东(EAST)西(WEST)南(SOUTH)北(NORTh)中(CENTER)

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Demo2 {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setTitle("这是一个窗口");
        frame.setResizable(true);
        frame.setVisible(true);
        frame.setBounds(100, 100, 500, 300);
        frame.setBackground(Color.pink);
        Button button0 = new Button("west");
        Button button1 = new Button("east");
        Button button2 = new Button("north");
        Button button3 = new Button("south");
        Button button4 = new Button("center");
        frame.setLayout(new BorderLayout());
        frame.add(button0, BorderLayout.WEST);
        frame.add(button1, BorderLayout.EAST);
        frame.add(button2, BorderLayout.NORTH);
        frame.add(button3, BorderLayout.SOUTH);
        frame.add(button4, BorderLayout.CENTER);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

在这里插入图片描述

4.3 第三种布局管理器——GridLayout(表格布局管理器)

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Demo2 {
    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.setTitle("这是一个窗口");
        frame.setResizable(true);
        frame.setVisible(true);
        frame.setBounds(100, 100, 500, 300);
        frame.setBackground(Color.pink);
        Button button0 = new Button("button");
        Button button1 = new Button("button");
        Button button2 = new Button("button");
        Button button3 = new Button("button");
        Button button4 = new Button("button");
        frame.setLayout(new GridLayout(3,2));
        frame.add(button0);
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

发布了877 篇原创文章 · 获赞 237 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/104969136
今日推荐