GUI编程

组件

窗口

弹窗

面板

文本框

列表框

按钮

图片

监听事件

鼠标

键盘事件

破解工具

1 简介

GUi的核心技术:Swing AWT

1.界面不美观

2.需要jre环境

为什么要学习GUI:

1.可以写出自己心中想要的一些小工具

2.工作时,也可能需要维护到swing界面,概率极小!

3.了解MVC架构,了解监听

2、AWT(抽象的窗口工具)

2.1 Awt介绍

1.包含了很多类和接口!

GUI:图形用户界面

2.元素:窗口,按钮,

3.java.awt

2.2组件和容器

1 Frame
 package com.kuang.lesson01;
 //GUI的第一个界面
 ​
 import java.awt.*;
 ​
 public class TestFrame {
     public static void main(String[] args) {
         //Frame JDK
         Frame frame = new Frame("我的第一个Java图形界面窗口");
 ​
         //需要设置可见性
         frame.setVisible(true);
 ​
         //设置窗口大小
         frame.setSize(400,400);
 ​
         //设置背景颜色 Color
         frame.setBackground(new Color(134, 42, 42));
 ​
         //弹出的初始位置
         frame.setLocation(200,200);
 ​
         //设置大小固定
         frame.setResizable(false);
 ​
 ​
 ​
    }
 }
 ​

问题:发现窗口关闭不掉,停止Java程序

尝试回顾封装

 package com.kuang.lesson01;
 ​
 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(300,100,200,200,Color.yellow);
         MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.red);
         MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.MAGENTA);
 ​
    }
 }
 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

解决了关闭窗口的事件。

 package com.kuang.lesson01;
 ​
 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(40, 161, 35));
 ​
         //panel 设置坐标,相对于frame(嵌套于frame中)
         panel.setBounds(50, 50, 400, 400);
         panel.setBackground(new Color(193, 15, 60));
 ​
         //frame.add(panel)
         frame.add(panel);
 ​
         frame.setVisible(true);
 ​
         //监听事件,监听窗口关闭事件 System.exit(0)
         //适配器模式
 ​
         frame.addWindowListener(new WindowAdapter() {
             //窗口点击关闭的时候需要做的事情
             @Override
             public void windowClosing(WindowEvent e) {
                 //结束程序
                 System.exit(0);
            }
        });
    }
 }

3 布局管理器

流式布局

 package com.kuang.lesson01;
 ​
 import java.awt.*;
 ​
 public class TestFlowLayout {
     public static void main(String[] args) {
        Frame frame = new Frame();
 ​
        //组件-按钮
         Button button1 = new Button("button1");//当写完一个new对象时按住alt+回车就可以生成左边的等式
         Button button2 = new Button("button2");
         Button button3 = new Button("button3");
 ​
        // frame.setLayout(new FlowLayout());//按钮的位置是居中
         //frame.setLayout(new FlowLayout(FlowLayout.LEFT));//把按钮的位置设置为居左
         frame.setLayout(new FlowLayout(FlowLayout.RIGHT));//把按钮的位置设置为居右
 ​
         frame.setSize(200,200);
 ​
         //把按钮添加上去
         frame.add(button1);
         frame.add(button2);
         frame.add(button3);
 ​
         frame.setVisible(true);
 ​
    }
 }
 ​

东南西北中

 package com.kuang.lesson01;
 ​
 import java.awt.*;
 ​
 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);
    }
 }
 ​

表格布局

 package com.kuang.lesson01;
 ​
 import java.awt.*;
 ​
 public class TestGridLayout {
     public static void main(String[] args) {
         Frame frame = new Frame("TestGridLayout");
 ​
         Button btn1 = new Button("btn1");
         Button btn2= new Button("btn2");
         Button btn3= new Button("btn3");
         Button btn4 = new Button("btn4");
         Button btn5 = new Button("btn5");
         Button btn6 = new Button("btn6");
 ​
         frame.setLayout(new GridLayout(3,2));
         frame.add(btn1);
         frame.add(btn2);
         frame.add(btn3);
         frame.add(btn4);
         frame.add(btn5);
         frame.add(btn6);
 ​
         frame.pack();//Java函数,相当于自动布局
 ​
         frame.setVisible(true);
 ​
    }
 }
 ​

编写的布局

 package com.kuang.lesson01;
 ​
 import java.awt.*;
 ​
 public class ExDemo {
     public static void main(String[] args) {
         //总的Frame
         Frame frame = new Frame();
         frame.setSize(400,300);
         frame.setLocation(300,400);
         frame.setBackground(Color.BLACK);
         frame.setVisible(true);
         frame.setLayout(new GridLayout(2,1));//表格布局两行一列 上下结构就出来了
 ​
 ​
 ​
         //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);
          frame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
                 System.exit(0);
            }
        });
 ​
 ​
 ​
 ​
 ​
 ​
 ​
 ​
 ​
    }
    }
 ​

总结

1.Frame是一个顶级窗口

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

3.布局管理器

1.流式

2.东西南北中

3.表格

4.大小,定位,背景颜色,可见性,监听

4 事件监听

事件监听:当某个事情发生的时候,干什么?

 package com.kuang.lesson02;
 ​
 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 TestActionEvent {
     public static void main(String[] args) {
         //按下按钮,触发一些事件
         Frame frame = new Frame();
         Button button = new Button();
         //因为,addActionListener()需要一个ActionListener,所有我们需要构造一个ActionListener= new MyActionListener();
         MyActionListener myActionListener = new MyActionListener();
         button.addActionListener(myActionListener);
 ​
         frame.add(button,BorderLayout.CENTER);
         frame.pack();
 ​
         windowClose(frame);//关闭窗口
         frame.setVisible(true);
 ​
 ​
 ​
 ​
    }
     //关闭窗口的事件
     private static void windowClose(Frame frame){
         frame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
                 System.exit(0);
            }
        });
    }
 }
 ​
 //事件监听
 class  MyActionListener implements ActionListener{
     @Override
     public  void actionPerformed(ActionEvent e){
         System.out.println("aaa");
 ​
    }
 }
 ​
 ​

多个按钮,共享一个事件

 package com.kuang.lesson02;
 ​
 import com.oop.demo05.B;
 ​
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 ​
 public class TestActionTwo {
     public static void main(String[] args) {
         //两个按钮实现同一个监听
         //开始   停止
         Frame frame = new Frame("开始-停止");
         Button button1 = new Button("start");
         Button button2 = new Button("stop");
 ​
         //可以显示的定义触发会返回的命令,如果不显示定义,则会走默认的值
         //可以多个按钮只写一个监听类
         button2.setActionCommand("button2-stop");
         MyMonitor myMonitor = new MyMonitor();
 ​
         button1.addActionListener(myMonitor);
         button2.addActionListener(myMonitor);
 ​
         frame.add(button1,BorderLayout.NORTH);
         frame.add(button2,BorderLayout.SOUTH);
 ​
         frame.pack();
         frame.setVisible(true);
    }
 }
 class MyMonitor implements ActionListener{
     @Override
     public void actionPerformed(ActionEvent e){
         //e.getActionCommand()获得按钮信息
         System.out.println("按钮被点击了: msg=> " + e.getActionCommand());
         if (e.getActionCommand().equals("start")){
 ​
        }
 ​
 ​
    }
 }
 ​

第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )的更多相关文章

  1. Java学习之AWT GUI编程

    Java学习之AWT GUI编程 0x00 前言 既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已.在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍. ...

  2. Java学习之Swing Gui编程

    Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...

  3. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  4. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  5. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

    JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...

  6. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  7. Java GUI 事件监听

    现在使用的仍是AWT的事件模型.涉及到3类对象: Event Source:事件源,即事件发生所在的组件 Event:事件,封装了此次事件的相关信息 Event Listener:事件监听器,监听事件 ...

  8. JAVA GUI 事件监听事件 详解 和 案例.

    GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...

  9. Java 界面编程【03】事件监听

    当你把界面都设计好了,总需要添加相应的执行动作给组件,在JAVA中有相应的时间处理机制,叫做“监听器”,给组件添加相应执行动作的过程叫做“注册”,其中的“监听器”是一个接口,里面包含了相应的执行函数, ...

随机推荐

  1. 【实战】通过Python实现疫情地图可视化

    目录 一. json模块 二.通过Python实现疫情地图可视化 2.将json格式的数据保存到Excel 3.应用pyecharts进行数据可视化 一. json模块 JSON(JavaScript ...

  2. SpringMVC学习笔记2

    一.日期赋值 目标:在springMVC中日期赋值兼容性更广泛 不能直接处理,必须使用转换器1.定义转换器,实现接口Converter<From,To> package com.zy.co ...

  3. Gym 101485 E Elementary Math 网络流 或者 二分图

    题意: 输入一个n,后面输入n行,每一行两个数a.b.你可以对a.b进行三种操作:+.-.* 你需要保证对每一行a.b选取一个操作得到一个结果 你要保证这n行每一个式子选取的操作之后得到的结果都不一样 ...

  4. P1435 回文字串(DP)

    题目描述 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成回文词.此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数. 比如 "Ab3bd"插 ...

  5. Codeforces Round #653 (Div. 3) C. Move Brackets

    题意/题解:经典括号匹配题目,不多说了. 代码: int t; int n; string s; int cnt; int main() { ios::sync_with_stdio(false);c ...

  6. VS Code 配置 Java IDE

    背景 维护的项目在一个内网环境,只能通过跳转机的FTP上传文件.项目是Java spring boot开发,之前的维护人员使用sts(https://spring.io/tools),使用起来体验极差 ...

  7. Eureka详解系列(五)--Eureka Server部分的源码和配置

    简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...

  8. k8s二进制部署 - harbor安装

    harbor安装 # 目录说明: # /opt/src : 源码.文件下载目录 # /opt/release : 各个版本软件存放位置 # /opt/apps : 各个软件当前版本的软链接 [root ...

  9. Python 是什么语言

    Python 是 解释型语言,强类型定义语言,动态类型定义语言 编译型语言 & 解释型语言 编译型语言:代码在执行前,需要编译(成机器语言文件,如 .exe 文件):以后再运行时,直接使用编译 ...

  10. 鸟哥的linux私房菜——第十六章学习(程序管理与 SELinux 初探)

    第十六章.程序管理与 SE Linux 初探 在 Linux 系统当中:"触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的 ...