GUI swing和awt

news2024/11/26 9:06:58

GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。

Java GUI主要有两个核心库,分别是AWT(java.awt:Abstract Windows ToolKit(抽象窗口工具包))和Swing(javax.swing:AWT的扩展)
AWT需要调用本地系统方法来实现功能,属重量级控件,
Swing是在AWT的基础上,建立的一套图像界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属轻量级组件。

AWT:

1.包含了很多类和接口2.元素:窗口、

核心类:

组件Component

  • 可以直接用的基本组件:button、TextArea、Label

  • 容器:有窗口Window【分为Frame和Dialog】和面板Panel【Applet】

基本组件存放在容器中,用add操作

窗口frame

Frame类用于创建一个具有标题栏的框架窗口作为程序的主要界面,它不依赖其他容器可以单独存在。运行后可以看到一个弹窗

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setSize(400,400);
        //设置背景颜色
        frame.setBackground(new Color(145, 36, 44));
        //设置弹出的初始位置  0,0 在左上角
        frame.setLocation(0,0);
        //设置窗口是否可拉伸
        frame.setResizable(false);
   }

面板Panel

特性:面板不能单独存在,必须在容器里面,可以看成一个空间。在程序中通常会使面板来实现一些特殊的布局。

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setSize(400,400);
        //设置背景颜色
        frame.setBackground(new Color(145, 36, 44));
        //设置弹出的初始位置  0,0 在左上角
        frame.setLocation(0,0);
        //设置窗口是否可拉伸
        frame.setResizable(false);
        //设置布局
        frame.setLayout(null);
        //pannel面板
        Panel panel = new Panel();
        panel.setBounds(0,0,100,400);
        panel.setBackground(new Color(83, 169, 56));
        frame.add(panel);
     }

布局管理器LayOut

流式布局(默认)

FlowLayout,流式布局管理器,按水平方向依次排列放置组件,排满一行,换下一行继续排列。排列方向(左到右 或 右到左)取决于容器的componentOrientation属性(该属性属于Component),它可能的值如下:

  • ComponentOrientation.LEFT_TO_RIGHT(默认)

  • ComponentOrientation.RIGHT_TO_LEFT

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setBounds(0,0,400,400);
        //文本框组件
        TextField num1 = new TextField();
        TextField num2 = new TextField();
        TextField num3 = new TextField();
        //一个按钮
        Button button = new Button("=");
        //一个标签
        Label label = new Label("+");
        //设置流式布局
        FlowLayout flowLayout = new FlowLayout();
        frame.setLayout(flowLayout);
        frame.add(num1);
        frame.add(label);
        frame.add(num2);
        frame.add(button);
        frame.add(num3);
    }

东西南北中

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setSize(400,400);
        //设置背景颜色
        frame.setBackground(new Color(145, 36, 44));
        //设置弹出的初始位置  0,0 在左上角
        frame.setLocation(0,0);
        //设置窗口是否可拉伸
        frame.setResizable(false);
        //按钮组件
        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);
   }

网格布局

GridLayout,网格布局管理器,它以矩形网格形式对容器的组件进行布置,把容器按行列分成大小相等的矩形网格,一个网格中放置一个组件,组件宽高自动撑满网格。

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setSize(400,400);
        //设置背景颜色
        frame.setBackground(new Color(145, 36, 44));
        //设置弹出的初始位置  0,0 在左上角
        frame.setLocation(0,0);
        //设置窗口是否可拉伸
        frame.setResizable(false);
        //按钮组件
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");
        Button button4 = new Button("button4");
        Button button5 = new Button("button5");
        Button button6 = new Button("button6");
        //设置表格3行2列
        GridLayout gridLayout = new GridLayout(3, 2);
        //设置布局
        frame.setLayout(gridLayout);
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.add(button5);
        frame.add(button6);
    }

事件监听

关闭窗口

        //监听窗口关闭事件
        frame.addWindowListener(new WindowAdapter() {
            //适配器模式
            @Override
            public void windowClosing(WindowEvent e) {
                //结束程序
                System.exit(0);
            }
        });

按钮点击事件

public static void main(String[] args) {
    //frame窗口
    Frame frame = new Frame("java图形化界面窗口");
    //设置可见性 与 窗口大小
    frame.setVisible(true);
    frame.setSize(400,400);
    //设置背景颜色
    frame.setBackground(new Color(145, 36, 44));
    //设置弹出的初始位置  0,0 在左上角
    frame.setLocation(0,0);
    //设置窗口是否可拉伸
    frame.setResizable(false);
    //按钮组件
    Button button1 = new Button("button1");
    //显示设置按钮上的信息
    button1.setActionCommand("button1-11");
    button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("eee");
            System.out.println(e.getActionCommand());
        }
    });
    frame.add(button1,BorderLayout.CENTER);
}

点击按钮后,控制台打印。setActionCommand是为了在多个按钮的监听写在一个监听器,用if判断


文本框回车事件

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setSize(400,400);
        //设置背景颜色
        frame.setBackground(new Color(145, 36, 44));
        //设置弹出的初始位置  0,0 在左上角
        frame.setLocation(0,0);
        //设置窗口是否可拉伸
        frame.setResizable(false);
        //文本框组件
        TextField textField = new TextField();
        //按下回车键,会触发这个监听
        textField.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //获取资源
                TextField field = (TextField) e.getSource();
                //打印文本框内容
                System.out.println(field.getText());
            }
        });
        frame.add(textField,BorderLayout.CENTER);
    }

鼠标监听

监听鼠标按压、鼠标释放、鼠标点击

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setBounds(0,0,400,400);
        frame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("鼠标进入组件区域");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("鼠标离开组件区域");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                // 获取按下的坐标(相对于组件)
                System.out.println("相对组件" + e.getPoint() + ",横坐标:" + e.getX() + ", 纵坐标:" + e.getY());
                // 获取按下的坐标(相对于屏幕)
                System.out.println("相对屏幕" + e.getLocationOnScreen() + ",横坐标:" + e.getXOnScreen() + ", 纵坐标:" + e.getYOnScreen());
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("鼠标释放");
            }

            @Override
            public void mouseClicked(MouseEvent e) {
                // 鼠标在组件区域内按下并释放(中间没有移动光标)才识别为被点击
                System.out.println("鼠标点击");
            }
        });
    }

鼠标拖动、鼠标移动、鼠标滚轮滚动

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setBounds(0,0,400,400);
        /**
         * 鼠标移动/拖动监听器
         */
        frame.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                // 鼠标保持按下状态移动即为拖动
                System.out.println("鼠标拖动");
            }
            @Override
            public void mouseMoved(MouseEvent e) {
                System.out.println("鼠标移动");
            }
        });
        /**
         * 鼠标滚轮监听器
         */
        frame.addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                // e.getWheelRotation() 为滚轮滚动多少的度量
                System.out.println("mouseWheelMoved: " + e.getWheelRotation());
            }
        });
    }

键盘监听

上下左右键和空格键:KeyEvent.VK_UP

public static final int VK_LEFT = 0x25;
public static final int VK_UP = 0x26;
public static final int VK_RIGHT = 0x27;
public static final int VK_DOWN = 0x28;
public static final int VK_SPACE = 0x20;
     public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setBounds(0,0,400,400);
        /**
         * 键盘监听事件
         */
        frame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                // 获取键值,和 KeyEvent.VK_XXXX 常量比较确定所按下的按键
                System.out.println("按下: " + e.getKeyChar() + ",键值为:" + e.getKeyCode());
            }

            @Override
            public void keyTyped(KeyEvent e) {
                // e.getKeyChar() 获取键入的字符
                System.out.println("键入: " + e.getKeyChar());
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("释放: " + e.getKeyCode());
            }
        });
    }

窗口监听

    public static void main(String[] args) {
        //frame窗口
        Frame frame = new Frame("java图形化界面窗口");
        //设置可见性 与 窗口大小
        frame.setVisible(true);
        frame.setBounds(0, 0, 400, 400);
        /**
         * 窗口监听事件
         */
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("窗口被关闭了");
                System.exit(0);
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("窗口被激活了");
            }
        });
    }

画笔Paint

public class MyPaint extends Frame {

    public void loadFrame(){
        setBounds(0,0,600,400);
        setVisible(true);
    }
    @Override
    public void paint(Graphics g) {
        //设置画笔的颜色
        g.setColor(Color.RED);
        //设置画一个圆圈
        g.drawOval(50,100,50,50);
        //画实心圆
        g.fillOval(100,100,50,50);

        //重新设置画笔的颜色
        g.setColor(Color.GREEN);
        //画实心矩形
        g.fillRect(150,100,100,50);
    }
}

在别的类中,启动

    public static void main(String[] args) {
        new MyPaint().loadFrame();
    }

Swing

Jframe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】传输层TCP协议

文章目录认识TCP协议TCP协议的格式字段的含义序号与确认号六个标志位窗口大小确认应答(ACK)机制超时重传机制连接管理机制三次握手四次挥手滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况总结认识TCP协议 传输控制协议 (TCP,T…

多边形网格算法笔记

本文是处理多边形和网格的各种笔记和算法。 推荐:使用 NSDT场景设计器 快速搭建 3D场景。 1、表面简化 下面描述了一种方法,用于减少构成表面表示的多边形数量,同时仍试图保留表面的基本形式。 如果正在为渲染和/或交互环境寻求性能改进&…

【CS224图机器学习】task1 图机器学习导论

前言:本期学习是由datawhale(公众号)组织,由子豪兄讲解的202302期CS224图机器学习的学习笔记。本次学习主要针对图机器学习导论做学习总结。1.什么是图机器学习?通过图这种数据结构,对跨模态数据进行整理。…

增减序列(差分)

分析:要想把整个数组变为同一个数,我们可以根据差分的思想来做。 差分定义:b[1]a[1] b[2]a[2]-a[1] ...... b[i]a[i]-a[i-1] 由定义可知,可以把b[2]~b[n]全部变为0,那么整个数组就一样了。现在问题转换为如何用最少的…

Seata-Server分布式事务原理加源码 (八) - Seata-XA模式

Seata-XA模式 Seata 1.2.0 版本重磅发布新的事务模式:XA 模式,实现对 XA 协议的支持。 我们从三个方面来深入分析: XA模式是什么?为什么支持XA?XA模式如何实现的,以及如何使用? XA模式 首先…

shell学习1

目录 一、echo 1.1 echo 1.2 打印彩色文本 1.3 打印彩色背景 二、printf 三、变量和环境变量 3.1 查看某个进程的环境变量 3.2给变量赋值。varvalue 3.3 给环境变量赋值 3.4 获取变量的长度 3.5 识别当前所使用的shell 3.6 检查是否为超级用户 四、数学运算 4.1 …

PHP新特性集合

php8新特性命名参数function foo(string $a, string $b, ?string $c null, ?string $d null) { /* … */ }你可以通过下面的方式传入参数进行调用foo(b: value b, a: value a, d: value d, );联合类型php7class Number {/** var int|float */private $number;/*** param f…

Vue|事件处理

事件处理1. 事件使用1.1 事件绑定1.2 事件参数2. 事件修饰符2.1 阻止默认事件2.2 阻止事件冒泡2.3 事件只允许触发一次2.4 事件捕获2.5 操作当前元素2.6 行为立即执行无需等待回调3. 键盘事件4. 本章小结4.1 事件使用小结4.2 事件修饰符小结4.3 键盘事件小结1. 事件使用 1.1 事…

C++STL剖析(八)—— unordered_set和unordered_multiset的概念和使用

文章目录前言1. unordered_set的介绍和使用🍑 unordered_set的构造🍑 unordered_set的使用🍅 insert🍅 find🍅 erase🍅 size🍅 empty🍅 clear🍅 swap🍅 count…

安全多方计算系列笔记1——前世今生

这一系列笔记参考了绿盟科技研究通讯的安全多方计算文章,及其他。 首先看定义:在不泄露参与方原始输入数据的前提下,允许分布式参与方合作计算任意函数,输出准确的计算结果。 起源 安全多方计算问题及解首先由姚期智&#xff08…

用大白话给你科普,到底什么是 API(应用程序编程接口)?

何为API?如果你在百度百科上搜索,你会得到如下结果:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组…

Linux 安装Python3

python3 下载地址 python3 下载地址 https://www.python.org/downloads/ 选择自己需要的版本、 此文中选择3.10.9 下载源码压缩包 可下载到本地后上传至Linux服务器也可以复制下载地址 wget https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgzpython3 安装 yum…

python练习——简化路径

项目场景: 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 /开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本…

新库上线 | CnOpenData中国地方政府债券信息数据

中国地方政府债券信息数据 一、数据简介 地方政府债券 指某一国家中有财政收入的地方政府地方公共机构发行的债券。地方政府债券一般用于交通、通讯、住宅、教育、医院和污水处理系统等地方性公共设施的建设。地方政府债券一般也是以当地政府的税收能力作为还本付息的担保。地…

【电源专题】案例:用电子负载模拟电池测试充电芯片

最近在做有关充电芯片的选型,所以需要测试充电芯片中的很多参数。如涓流充电电流、快速充电电流、截止电流等等。 如下所示为某充电IC充电过程中的电流电压变化曲线。可以看出其中存在多个电流如Ishort/Iterm/Iprechg/Ichgerg等等。电压点也有Vshortz/Vbatlow/Vbatreg等。这些…

VTK- vtkStripper

前言:本博文主要研究接口vtkStripper的实现原理及主要的应用场景,希望对各位小伙伴有所帮助。 描述:vtkStripper是一个过滤器,用于从输入多边形、三角形带和线中生成三角形带和/或折线。输入多边形仅当它们是三角形时才被组装成三…

【Linux】-- 进程信号(处理、内核)

上篇:【Linux】-- 进程信号(认识、应用)_川入的博客-CSDN博客 目录 信号其他相关常见概念 pending handler block 信号处理的过程 sigset_t sigset_t使用 系统接口 sigpending sigprocmask 捕捉方法 sigaction struct sigactio …

小白入门模拟IC设计,如何快速学习?

众所周知,模拟电路很难学。以最普遍的晶体管来说,我们分析它的时候必须首先分析直流偏置,其次在分析交流输出电压。可以说,确定工作点就是一项相当麻烦的工作(实际中来说),晶体管的参数多、参数…

JavaScript 计时事件

JavaScript 计时事件 通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。 在 JavaScript 中使用计时事件是很容易的,两个关键方法是: setInterval() - 间隔指定的…

【CNN记录】tensorflow中depth_to_space

功能把depth维的数据移到space上,与spacetodepth刚好是相反的操作,depth对应channel,space对应height和width,而该操作是把depth上的数据分给height和width上,所以对应有一个参数block_size,要求原tensor的…