当前位置: 首页 > news >正文

GUI swing和awt

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() {//适配器模式@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("鼠标进入组件区域");}@Overridepublic void mouseExited(MouseEvent e) {System.out.println("鼠标离开组件区域");}@Overridepublic void mousePressed(MouseEvent e) {// 获取按下的坐标(相对于组件)System.out.println("相对组件" + e.getPoint() + ",横坐标:" + e.getX() + ", 纵坐标:" + e.getY());// 获取按下的坐标(相对于屏幕)System.out.println("相对屏幕" + e.getLocationOnScreen() + ",横坐标:" + e.getXOnScreen() + ", 纵坐标:" + e.getYOnScreen());}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("鼠标释放");}@Overridepublic 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() {@Overridepublic void mouseDragged(MouseEvent e) {// 鼠标保持按下状态移动即为拖动System.out.println("鼠标拖动");}@Overridepublic void mouseMoved(MouseEvent e) {System.out.println("鼠标移动");}});/*** 鼠标滚轮监听器*/frame.addMouseWheelListener(new MouseWheelListener() {@Overridepublic 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() {@Overridepublic void keyPressed(KeyEvent e) {// 获取键值,和 KeyEvent.VK_XXXX 常量比较确定所按下的按键System.out.println("按下: " + e.getKeyChar() + ",键值为:" + e.getKeyCode());}@Overridepublic void keyTyped(KeyEvent e) {// e.getKeyChar() 获取键入的字符System.out.println("键入: " + e.getKeyChar());}@Overridepublic 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() {@Overridepublic void windowClosing(WindowEvent e) {System.out.println("窗口被关闭了");System.exit(0);}@Overridepublic void windowActivated(WindowEvent e) {System.out.println("窗口被激活了");}});}

画笔Paint

public class MyPaint extends Frame {public void loadFrame(){setBounds(0,0,600,400);setVisible(true);}@Overridepublic 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

相关文章:

GUI swing和awt

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

速通Spring

尚硅谷2023最新版Spring6课程_bilibili 1 Spring 【强制】Spring是什么? 1) Spring是一款主流的Java EE轻量级开源框架。 轻量级:体积很小,且不需要依赖于其他组件。 2) 狭义的Spring。 Spring Framework。 3) 广义的Spring。 以Spring F…...

【C++】C++入门

一、 C关键字(C98) C有63个关键字(C语言有32个),如下: asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutabl…...

Linux网络技术学习(五)—— 网络设备初始化(I)

文章目录什么时候进行的设备初始化?设备注册和初始化NIC(网卡 Network Interface Card)初始化的基本目标设备与内核之间的交互硬件中断中断类型传送节流方式为了改善效率中断共享IRQ处理函数映射的组织irqaction结构体存储方式什么时候进行的…...

[技术选型] ClickHouse和StarRocks的介绍

文章目录1.ClickHouse介绍2.StarRocks介绍1.ClickHouse介绍 ClickHouse是面向联机分析处理(OLAP)的开源分析引擎。最初由俄罗斯第一搜索引擎Yandex开发,于2016年开源,开发语言为C。由于其优良的查询性能,PB级的数据规…...

算法刷题打卡第90天:表现良好的最长时间段

表现良好的最长时间段 难度:中等 给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」,意味在这…...

Python语言零基础入门教程(十七)

Python 文件I/O 本章只讲述所有基本的 I/O 函数,更多函数请参考Python标准文档。 #### 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达式,并将结果写…...

C语言中大小端问题

目录 一、什么是大小端 二、 举个例子 三、大小端演示 四、解释"二"中举例的问题 ​五、怎么判断是大端还是小端 六、一个题目 一、什么是大小端 大端模式(大端字节序存储):就是高位字节数据存放在内存的低地址端&#xff…...

vue2+微前端qiankun从搭建到部署的实践(主子应用切换;集成vue3+vite3子应用)

一、最终效果 二、微前端(qiankun)介绍及为什么选择用微前端,可以看官网 三、目录结构如下 四、具体配置 一、主应用配置 1、主应用技术栈 Vue-cli4搭建项目Vue2Element-Uiqiankun;Vue2Element-Uiqiankun 2、搭建好主项目&…...

怎么代理微信小程序创业?

随着微信的兴起,小程序已经成为了人们生活中不可或缺的一部分。如果你想要创业的话,那么代理微信小程序是一个不错的选择。本文将为大家介绍怎么代理微信小程序创业。 一、什么是微信小程序 微信小程序是一款专为移动设备使用者而设计的应用。它通过扫…...

今天是情人节呐,我利用Python制作了好多表白的东西,快来吧~

今天是情人节那,有没有现在没有对象的宝子,评论里扣个111哈哈 目录 玫瑰 爱心树 丘比特 多彩气球 阿玥的小课堂 一、情人节的由来 二、情人节的来历和意义 玫瑰 局部代码实现如下: # 花瓣1 turtle.left(150) turtle.circle(-90, 70) …...

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

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

C/【静态通讯录】

🌱博客主页:大寄一场. 🌱系列专栏:C语言学习笔记 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 前言 往期回顾: C/扫雷 C/N子棋 通讯录作为通讯录地址的书本,当今的通讯录可以涵盖多项…...

万卷书 - 让孩子对自己负责 [The Self-Driven Child]

让孩子对自己负责 The Self-Driven Child - 让你的孩子更加科学合理的掌控自己的生活 简介 《The Self-Driven Child》(2018)解释了我们对孩子的习惯性控制欲,它导致了孩子压力过大、难以合作,以及主观能动性差。本书不提倡这种做法,而是认为我们应该帮助孩子自己做出合适…...

Postman中cookie的操作

在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问。 Postman接口请求使用Cookie有如下两种方式: 1、直接在头域中添加Cookie头域,适用于已经知道请求所用Cookie数据的情况。 2、使用…...

torch.grid_sample

参考: 双线性插值的理论Pytorch grid_sample解析PyTorch中grid_sample的使用方法pytorch中的grid_sample()使用 查阅官方文档,TORCH.NN.FUNCTIONAL.GRID_SAMPLE grid_sample的函数签名如下所示,torch.nn.functional.grid_sample(input, gr…...

前端基于 Docker 的 SSR 持续开发集成环境实践

项目收益 整体开发效率提升20%。加快首屏渲染速度,减少白屏时间,弱网环境下页面打开速度提升40%。 权衡 在选择使用SSR之前,需要考虑以下事项! SSR需要可以运行Node.js的服务器,学习成本相对较高。对于服务器而言&a…...

ARM交叉编译入门及交叉编译第三方库常见问题解析

1. 交叉编译是什么? 交叉编译简单说来,就是编译成果物的地儿不是你运行这个成果物的地儿。最常见的场景,就是我们要编译一个 ARM版本 的可执行程序,但我们编译这个 ARM版本 可执行程序的地方,是在一个 x86_x64 的平台…...

Ruby Web Service 应用 - SOAP4R

什么是 SOAP? 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范。 SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。 简单对象访问协议是交换数据的一种协议规范,是一种轻量的、…...

HashMap底层实现原理概述

原文https://blog.csdn.net/fedorafrog/article/details/115478407 hashMap结构 常见问题 在理解了HashMap的整体架构的基础上,我们可以试着回答一下下面的几个问题,如果对其中的某几个问题还有疑惑,那就说明我们还需要深入代码&#xff0c…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识,而这期内容就涉及到了前面的第六期-RCE模块,第七期-File inclusion模块,第八期-Unsafe Filedownload模块。 什么是"遍历"呢:对学过一些开发语言的朋友来说应该知道&…...

LINUX编译vlc

下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...