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语言中大小端问题
目录 一、什么是大小端 二、 举个例子 三、大小端演示 四、解释"二"中举例的问题 五、怎么判断是大端还是小端 六、一个题目 一、什么是大小端 大端模式(大端字节序存储):就是高位字节数据存放在内存的低地址端ÿ…...

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的整体架构的基础上,我们可以试着回答一下下面的几个问题,如果对其中的某几个问题还有疑惑,那就说明我们还需要深入代码,…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...