GUI入门(AWT包)

这篇博客介绍了GUI的基础知识,特别是JAVA AWT包的相关内容。文章讲解了GUI的概述,包括其优势,并指出JAVA提供了java.awt、javax.swing和java.awt.event三个包来支持GUI开发。接着详细阐述了AWT包中的Frame类,如何创建和设置窗口可见性,以及解决关闭窗口问题的方法。此外,还提到了Panel类和三种布局管理器:流式布局、边界布局和网格布局。最后,博主通过实例讲解了按钮监听事件和输入框TextField的监听功能,并展示了如何创建一个简单的计算器。

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

GUI入门(AWT包)

1.1GUI的概述

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 [1]

图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。

1.2JAVA针对GUI提供了三个包

java.awt 包 – 主要提供字体/布局管理器

javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)

java.awt.event 包 – 事件处理,后台功能的实现。

1.3 AWT包下的类及其作用

1.3.1 Frame类

这个类是用来设置窗口的工具类

新建这个类对象就等于新建了一个窗口

举例说明:

package GUI;

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

public class frame {
    public static void main(String[] args) {
        Frame frame = new Frame("我的第一个窗口");
        frame.setVisible(true);//设置可见性
        frame.setBounds(400,400,500,500);//设置初始位置和窗口大小
        frame.setBackground(Color.BLUE);//设置背景颜色
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    }
} 
注意以下几点

问题一:new 了一个窗口 运行结果显示不出来

解决方案 :当你new这个窗口时需要设置可见性 : frame.setVisible(true);//设置可见性

如果没有设置可见性的话 你这个窗口是显示不出来的 是隐藏的

问题二:想关闭窗口点击X号没反应:

解决方案:增加一个窗口监听事件: frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

1.3.2 面板类Panel

面板是用来加在窗口里面的

可以看成是一个空间,但是不能单独存在

举例如下:

package GUI;

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

public class panel {
    public static void main(String[] args) {
        Frame frame = new Frame("我爱JAVA");//创建一个新的窗口
        Panel panel = new Panel();//创建一个新的面板
        frame.setLayout(null);//设置布局为默认
        frame.setBounds(300,300,500,500);//设置窗口的位置和大小
        panel.setBounds(200,200,200,200);//设置面板相对于窗口的位置和面板的大小
        panel.setBackground(Color.BLUE);//设置面板颜色
        frame.add(panel);//把面板添加到窗口里面去
        frame.setVisible(true);//窗口可视化
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });//开启窗口监听 使得窗户口可以关闭

    }
}

1.3.3三种布局

流式布局(Flowlayout)

是一种从左到右依次排列组件的布局方式

package GUI;

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

public class layout {
    public static void main(String[] args) {
       //流式布局
        Frame frame = new Frame();
        frame.setBounds(100,100,200,300);
        frame.setLayout( new  FlowLayout(FlowLayout.LEFT));//设置流式布局朝左看齐
        //创建一些按钮 把按钮加到窗口中去
        Button button1 = new Button("按钮1");
        Button button2 = new Button("按钮2");
        Button button3 = new Button("按钮3");
        Button button4 = new Button("按钮4");
        Button button5 = new Button("按钮5");
        Button button6 = new Button("按钮6");

        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.add(button5);
        frame.add(button6);
        frame.setVisible(true);//设置窗口可视化
        //适配器模式 窗口监听使得窗口可以关闭
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });//


    }
}
东南西北中布局(Borderlayout)

一种以方向为顺序的布局方式

package GUI;

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

public class bordetlayout {
    public static void main(String[] args) {
        Frame frame = new Frame("东南西北中布局");
        frame.setBounds(200,200,500,500);
        Button button1 = new Button("1");
        Button button2 = new Button("2");
        Button button3 = new Button("3");
        Button button4 = new Button("4");
        Button button5 = new Button("5");
        frame.add(button1,BorderLayout.EAST);
        frame.add(button2,BorderLayout.SOUTH);
        frame.add(button3,BorderLayout.WEST);
        frame.add(button4,BorderLayout.NORTH);
        frame.add(button5,BorderLayout.CENTER);
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
表格式布局(Girdlayout)
package GUI;

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

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

        frame.setBounds(200,200,400,400);
        frame.setLayout(new GridLayout(2,2));//设置表格布局模式 二行二列
        //然后把按钮添加进窗口
        Button button1 = new Button();
        Button button2 = new Button();
        Button button3 = new Button();
        Button button4 = new Button();
        button1.setBackground(Color.BLUE);
        button2.setBackground(Color.GREEN);
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.setVisible(true);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

1.3.5按钮监听事件

给按钮设立一个监听事件 当按下按钮就会触发这个监听事件

package GUI;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//事件监听
public class ActionEvent {
    public static void main(String[] args) {
        //按钮监听
        Frame frame = new Frame();
        frame.setVisible(true);
        frame.setBounds(200,200,400,400);
        Button button = new Button();
        //给这个按钮增加一个监听事件 当按下按钮会触发事件
         button.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(java.awt.event.ActionEvent e) {
                 System.out.println("按钮监听事件发生");
             }

         });
         frame.add(button);
         frame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
                 System.exit(0);
             }
         });//设置一个窗口监听事件来关闭窗口
     }
}

点击按钮 就会输出"按钮监听事件发生"这段话

1.3.6输入框TextField 监听

当你在窗口中的输入框里打一段话就会被监听到 输出出来

package GUI;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

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

//文本监听
public class texttest {
    public static void main(String[] args) {
        Frame frame = new Frame();
        TextField textField = new TextField();//新建一个文本
        textField.addActionListener(new mylisten());//给文本增加一个监听事件
        frame.add(textField);//把文本添加到窗口中
        frame.setVisible(true);
        frame.setBounds(200,200,200,200);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
            System.exit(0);
            }
        });



    }
}
class mylisten implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        TextField textField1 = (TextField) e.getSource();
        System.out.println(textField1.getText());
    }
}

1.3.7做一个计算器

package GUI;

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

public class calc {
    public static void main(String[] args) {
new  calcs();
    }
}
class  calcs extends Frame{
    //设置个3本域
    TextField textField = new TextField();
    TextField textField2 = new TextField();
    TextField textField3 = new TextField();
    static    int num1,num2;//定义三个变量
    public  calcs(){

        setTitle("计算器");
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        setVisible(true);//计算器可视化
        setBounds(200,200,200,200);//设置计算器窗口的大小
        setLayout( new GridLayout(1,5));//设置计算器的布局
        //设置一个按钮
        Button button = new Button("=");

        //设置一个加号图标+
        Label label = new Label("+");
        //把这些组件添加到窗口中看看效果
        add(textField);
        add(label);
        add(textField2);
        add(button);
        add(textField3);
        //设置按钮监听 当点击按钮 将num1和num2的和给num3
        button.addActionListener(new myaction());}
 private   class  myaction implements  ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
     num1=  Integer.parseInt(textField.getText());
     num2=Integer.parseInt(textField2.getText());
     textField3.setText(""+(num1+num2));
    }
}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值