ideal快速入门GUI(代码简单易懂)

本文介绍了GUI在现代软件中的重要性,特别是Java通过AWT和Swing提供的图形用户界面技术。详细讲解了AWT的抽象窗口工具集,组件和容器(如Frame和Panel)、布局管理器(如FlowLayout、BorderLayout和GridLayout)的应用实例。通过实例演示,展示了如何创建和管理多个窗口、面板和使用不同的布局方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、GUI简介

GUI的核心技术是AWT和Swing,早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看到历史的足迹。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件、操作系统、应用软件一条龙的产品,与其它PC不兼容。这使得Apple公司错过了一次一统全球PC的好机会。
  后来,Microsoft公司推出了风靡全球的Windows操作系统,它凭借着优秀的图形化用户界面,一举奠定了操作系统标准的地位。这也造就了世界首富—比尔.盖茨和IT业的泰山北斗微软公司。
  在这图形用户界面风行于世的今天,一个应用软件没有良好的GUI是无法让用户接受的。而Java语言也深知这一点的重要性,它提供了一套可以轻松构建GUI的工具。

AWT

2.1 AWT定义

AWT(Abstract Window Toolkit)英文我们可以清楚的看到它是抽象窗口工具集。是基本的GUI类库,AWT也是窗口框架,包含不同平台的窗口系统。AWT中有两个核心的类:组件和容器。组件就是按钮、文本框…容器就是一个载体,用来添加这些元素。

容器又分为window和panel。window可以显示出来,可以向里面添加按钮等组件,panel也可以添加组件,panel不能独立显示,需要添加到window里才可以进行显示。window中有frame,frame是一个窗口,也可以叫框架。

2.2组件和容器

1、Frame
import java.awt.*;

public class TestFrame {
    public static void main(String[] args) {
        Frame frame = new Frame("我的第一个Java图像界面窗口");
        //需要设置可见性
        frame.setVisible(true);
        //设置窗口大小及初始位置
        frame.setBounds(200,200,400,400);
        //设置背景颜色
        frame.setBackground(new Color(1,2,1));
        //设置固定大小
        frame.setResizable(false);

    }

在这里插入图片描述

展示多个窗口

import java.awt.*;

public class TestFrame2 {
    public static void main(String[] args) {
        MyFrame myFrame1 = new MyFrame(100,100,200,200,Color.blue);
        MyFrame myFrame2 = new MyFrame(100,300,200,200,Color.red);
        MyFrame myFrame3 = new MyFrame(300,100,200,200,Color.yellow);
        MyFrame myFrame4= new MyFrame(300,300,200,200,Color.black);

    }
}
class MyFrame extends Frame{
    static int id =0;
    public MyFrame(int x,int y,int w ,int h,Color color){
        super("MyFrame"+(++id));
        setBackground(color);
        setBounds(x,y,w,h);
        setVisible(true);
    }

}

在这里插入图片描述

2、panel

解决了关闭事件!

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

public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame();
        Panel panel = new Panel();
        //设置布局
        frame.setLayout(null);
        //设置坐标
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(1,1,1));
        //设置坐标
        panel.setBounds(50,50,300,300);
        panel.setBackground(new Color(1,243,54));
        //panel不能单独存在,它存在于窗口中,所以add添加到窗口中
        frame.add(panel);
        //设置可视化
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            @Override//适配器模式
            public void windowClosing(WindowEvent e) {
                System.exit(0);//结束程序
            }//监听事件,监听窗口关闭事件
        });
}
}

在这里插入图片描述

3、布局管理器
1、流式布局
import java.awt.*;

public class TestFolwLayout {
    public static void main(String[] args) {
        Frame frame = new Frame();
        //创建一个组件,按钮
        Button button1 = new Button("按钮1");
        Button button2 = new Button("按钮2");
        Button button3 = new Button("按钮3");
        //设置为流式布局
        frame.setLayout(new FlowLayout());
        //frame.setLayout(new FlowLayout( FlowLayout.LEFT));
        //frame.setLayout(new FlowLayout( FlowLayout.RIGHT));

        frame.setSize(200,300);
        //把按钮添加上去
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.setVisible(true);


    }
}

在这里插入图片描述

2、东西南北中
public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("TestBorderLayout");
        Button east = new Button("East");
        Button west = new Button("West");
        Button south = new Button("South");
        Button north = new Button("North");
        Button center = new Button("Center");
        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(north,BorderLayout.NORTH);
        frame.add(center,BorderLayout.CENTER);
        frame.setSize(200,200);
        frame.setVisible(true);
    }
}

在这里插入图片描述

3、表格布局
import java.awt.*;

public class TestGridLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("TestGridLayout");
        Button but1= new Button("but1");
        Button but2 = new Button("but2");
        Button but3 = new Button("but3");
        Button but4 = new Button("but4");
        Button but5 = new Button("but5");
        frame.setLayout(new GridLayout(3,2));
        frame.add(but1);
        frame.add(but2);
        frame.add(but3);
        frame.add(but4);
        frame.add(but5);
        frame.pack();//java函数!自动定位布局
        frame.setVisible(true);
    }
}

在这里插入图片描述

练习:
在这里插入图片描述

分析过程
在这里插入图片描述

代码实现

import java.awt.*;

public class Demo {
    public static void main(String[] args) {
        Frame frame = new Frame();

        frame.setLayout(new GridLayout(2,1));
        frame.setSize(300,400);
        frame.setLocation(300,300);
        frame.setVisible(true);
        //4个面板
        Panel p1 = new Panel(new BorderLayout());
        Panel p2 = new Panel(new GridLayout(2,1));
        Panel p3 = new Panel(new BorderLayout());
        Panel p4 = new Panel(new GridLayout(2,2));
        //拆分上面
        p1.add(new Button("East-1"),BorderLayout.EAST);
        p1.add(new Button("West-1"),BorderLayout.WEST);
        p2.add(new Button("p2-btn-1"));
        p2.add(new Button("p2-btn-2"));
        p1.add(p2,BorderLayout.CENTER);
        //拆分下面
        p3.add(new Button("East-2"),BorderLayout.EAST);
        p3.add(new Button("West-2"),BorderLayout.WEST);
        //中间四个
        for (int i = 0; i < 4; i++) {
            p4.add(new Button("for-"+i));
        }
        p3.add(p4,BorderLayout.CENTER);
        frame.add(p1);
        frame.add(p3);
    }
}

在这里插入图片描述

总结:

1.frame是一个顶级窗口

2.panel无法单独显示,必须添加到某个容器中

2.布局管理器

1.流式

2.东西南北中

3.表格

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值