GDPU Java 天码行空7

实验目的:
熟悉awt组件和三种基本布局,掌握按钮、文本框、标签、等基本控件的使用和事件响应编程。
熟悉布局管理器

1. 窗体关闭事件

💖 WindowCloseEvent.java

import java.awt.event.WindowAdapter; // 导入WindowAdapter类,用于处理窗口事件
import java.awt.event.WindowEvent; // 导入WindowEvent类,用于表示窗口事件import javax.swing.*; // 导入Swing包,用于创建和管理图形用户界面// 创建一个继承自JFrame的类,用于处理窗口关闭事件
public class WindowCloseEvent extends JFrame
{// 构造函数,初始化窗口public WindowCloseEvent(){// 设置窗口标题this.setTitle("窗体关闭事件");// 设置窗口大小this.setSize(600, 300);// 设置默认关闭操作,当窗口关闭时退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 添加一个窗口监听器,用于监听窗口关闭事件this.addWindowListener(new WindowAdapter(){// 重写窗口关闭事件处理方法@Overridepublic void windowClosing(WindowEvent e){// 当窗口关闭时,退出程序System.exit(0);}});}// 主函数,程序的入口点public static void main(String[] args){// 创建WindowCloseEvent类的实例,即创建一个窗口WindowCloseEvent window = new WindowCloseEvent();// 设置窗口可见window.setVisible(true);}
}

💖 输出结果

在这里插入图片描述

2. 流式布局

三个按钮,点击按钮改变字体颜色,写出实现代码,贴出运行效果。

💖 FlowLayoutButton.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class FlowLayoutButton extends JFrame
{private JButton button1, button2, button3;private JLabel label;public FlowLayoutButton(){// 设置窗口标题this.setTitle("流式布局按钮");// 设置窗口大小this.setSize(300, 200);// 设置布局为流式布局this.setLayout(new FlowLayout());// 创建按钮1button1 = new JButton("按钮1");// 创建按钮2button2 = new JButton("按钮2");// 创建按钮3button3 = new JButton("按钮3");// 创建标签label = new JLabel("点击按钮改变字体颜色");// 为按钮1添加事件监听器button1.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){// 当按钮1被点击时,改变标签的字体颜色为红色label.setForeground(Color.RED);}});// 为按钮2添加事件监听器button2.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){// 当按钮2被点击时,改变标签的字体颜色为绿色label.setForeground(Color.GREEN);}});// 为按钮3添加事件监听器button3.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){// 当按钮3被点击时,改变标签的字体颜色为蓝色label.setForeground(Color.BLUE);}});// 将按钮和标签添加到窗口中this.add(button1);this.add(button2);this.add(button3);this.add(label);}public static void main(String[] args){// 创建FlowLayoutButton类的实例,即创建一个窗口FlowLayoutButton window = new FlowLayoutButton();// 设置窗口可见window.setVisible(true);}
}

💖 输出结果

在这里插入图片描述

3. 网格布局

录入QQ号,不是数字不让录入,写出实现代码,贴出运行效果。

💖 源代码:GridLayoutQQ.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class GridLayoutQQ extends JFrame
{// 创建一个文本输入框private JTextField textField;// 创建一个标签private JLabel label;// 构造函数,初始化窗口public GridLayoutQQ(){// 设置窗口标题this.setTitle("网格布局QQ号输入");// 设置窗口大小this.setSize(300, 200);// 设置布局为网格布局,2行2列this.setLayout(new GridLayout(2, 2));// 创建一个文本输入框,长度为10textField = new JTextField(10);// 创建一个标签,提示用户输入QQ号label = new JLabel("请输入QQ号:");// 为文本输入框添加键盘事件监听器textField.addKeyListener(new KeyAdapter(){// 重写键盘事件处理方法@Overridepublic void keyTyped(KeyEvent e){// 获取按下的键的字符char c = e.getKeyChar();// 如果按下的键不是数字,则不处理if (!Character.isDigit(c)){e.consume();}}});// 将标签和文本输入框添加到窗口中this.add(label);this.add(textField);}// 主函数,程序的入口点public static void main(String[] args){// 创建GridLayoutQQ类的实例,即创建一个窗口GridLayoutQQ window = new GridLayoutQQ();// 设置窗口可见window.setVisible(true);}
}

💖 输出结果

在这里插入图片描述

4. 边界布局

实现鼠标事件案例:鼠标移动到按钮上改变背景颜色,写出实现代码,贴出运行效果。

💖 源代码:BorderLayoutMouse.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class BorderLayoutMouse extends JFrame
{// 创建一个按钮private JButton button;// 构造函数,初始化窗口public BorderLayoutMouse(){// 设置窗口标题this.setTitle("边界布局鼠标事件");// 设置窗口大小this.setSize(300, 200);// 设置布局为边界布局this.setLayout(new BorderLayout());// 创建一个按钮,显示文本为"按钮"button = new JButton("按钮");// 为按钮添加鼠标事件监听器button.addMouseListener(new MouseAdapter(){// 重写鼠标进入事件处理方法@Overridepublic void mouseEntered(MouseEvent e){// 当鼠标进入按钮时,改变按钮的背景颜色为黄色button.setBackground(Color.YELLOW);}// 重写鼠标离开事件处理方法@Overridepublic void mouseExited(MouseEvent e){// 当鼠标离开按钮时,改变按钮的背景颜色为白色button.setBackground(Color.WHITE);}});// 将按钮添加到窗口的中心区域this.add(button, BorderLayout.CENTER);}// 主函数,程序的入口点public static void main(String[] args){// 创建BorderLayoutMouse类的实例,即创建一个窗口BorderLayoutMouse window = new BorderLayoutMouse();// 设置窗口可见window.setVisible(true);}
}

💖 运行结果

在这里插入图片描述

5. Eclipse中安装WindowBuilder插件

  • 👨‍🏫 安装教程
    不知道成没成功
    在这里插入图片描述

6. 实现登陆功能

如果用户名密码正确,则跳转到新界面,并显示欢迎您:***。用户名与登陆时到输入到内容一致。若用户名或密码错误则弹出对话框提示。

💖 LoginFrame.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class LoginFrame extends JFrame
{
// 创建一个文本输入框,用于输入用户名private JTextField usernameField;
// 创建一个密码输入框,用于输入密码private JPasswordField passwordField;
// 创建一个登录按钮private JButton loginButton;// 构造函数,初始化窗口public LoginFrame(){// 设置窗口标题setTitle("登录界面");// 设置窗口大小setSize(800, 300);// 设置默认关闭操作,当窗口关闭时退出程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置布局为网格布局,3行2列setLayout(new GridLayout(3, 2));// 添加一个标签,提示用户输入用户名add(new JLabel("用户名:"));// 创建一个文本输入框,用于输入用户名usernameField = new JTextField();// 将文本输入框添加到窗口中add(usernameField);// 添加一个标签,提示用户输入密码add(new JLabel("密码:"));// 创建一个密码输入框,用于输入密码passwordField = new JPasswordField();// 将密码输入框添加到窗口中add(passwordField);// 创建一个登录按钮loginButton = new JButton("登录");// 为登录按钮添加事件监听器loginButton.addActionListener(new ActionListener(){// 重写事件处理方法@Overridepublic void actionPerformed(ActionEvent e){// 获取文本输入框和密码输入框中的内容String username = usernameField.getText();String password = new String(passwordField.getPassword());// 判断用户名和密码是否正确if (username.equals("lighting") && password.equals("123")){// 如果正确,显示欢迎信息,并打开欢迎界面JOptionPane.showMessageDialog(LoginFrame.this, "登录成功");WelcomeFrame welcomeFrame = new WelcomeFrame(username);welcomeFrame.setVisible(true);LoginFrame.this.setVisible(false);} else{// 如果错误,显示错误信息JOptionPane.showMessageDialog(LoginFrame.this, "用户名或密码错误");}}});// 将登录按钮添加到窗口中add(loginButton);}// 主函数,程序的入口点public static void main(String[] args){// 创建LoginFrame类的实例,即创建一个窗口LoginFrame loginFrame = new LoginFrame();// 设置窗口可见loginFrame.setVisible(true);}
}// WelcomeFrame类继承自JFrame,用于显示欢迎信息
class WelcomeFrame extends JFrame
{
// 构造函数,初始化窗口public WelcomeFrame(String username){
// 设置窗口标题setTitle("欢迎界面");
// 设置窗口大小setSize(300, 200);
// 设置默认关闭操作,当窗口关闭时退出程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置布局为网格布局,2行1列setLayout(new GridLayout(2, 1));// 添加一个标签,显示欢迎信息add(new JLabel("欢迎 " + username + "!"));// 创建一个退出按钮JButton exitButton = new JButton("退出");// 为退出按钮添加事件监听器exitButton.addActionListener(new ActionListener(){// 重写事件处理方法@Overridepublic void actionPerformed(ActionEvent e){// 当按钮被点击时,退出程序System.exit(0);}});// 将退出按钮添加到窗口中add(exitButton);}
}

💖 运行结果

在这里插入图片描述

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

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

相关文章

江新安教授受邀金佰利进行《研发创新与创新思维》培训

近日,科济管线创始人江新安教授受邀金佰利为金佰利全国研发团队进行《研发创新与创新思维》培训授课。创新思维的两种思维形式——非逻辑思维和逻辑思维及其训练的主要方法。创新思维的培养,对于克服思维定势,提供创新方法,可以发…

FreGS:具有渐进频率正则化的3D高斯溅射

FreGS: 3D Gaussian Splatting with Progressive Frequency Regularization FreGS:具有渐进频率正则化的3D高斯溅射 Jiahui Zhang1  Fangneng Zhan2  Muyu Xu1  Shijian Lu1  Eric Xing3, 4 张家慧 1 詹方能 2 许慕玉 1 卢世坚 1 邢志伟 3, 4 1Nanyang Technolo…

19岁第一份“贺礼”,美创蝉联“2023年度数字化赋能服务商”

在即将到来的19岁,美创科技迎来第一份生日“贺礼”,再次蝉联“2023年度数字化赋能服务商”! 4月13日,以“数聚浙里 智领未来”为主题,由浙江省首席信息官协会主办的数字化转型与升级论坛暨CIO年度峰会于杭州隆重召开。…

抖音直播浏览器插件-自动回复评论-自动循环话术

随着互联网技术的飞速发展,直播行业迎来了前所未有的繁荣。抖音直播作为其中的佼佼者,不仅为用户提供了丰富多彩的娱乐内容,还不断推陈出新,通过技术创新提升用户体验。今天,我们要介绍的是一款名为抖音直播浏览器插件…

[MySQL]数据库原理8——喵喵期末不挂科

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

大数据行业英语单词巩固20240410

20240410 Communication - 沟通 Example: Effective communication is essential for project success. 有效的沟通对于项目的成功至关重要。 Collaboration - 协作 Example: Team collaboration is crucial in achieving our goals. 团队协作对于实现我们的目标至关重要。 …

数字化仪:为何成为示波器的理想替代品?——PCIe8910M

在现代科技领域,数字化仪逐渐成为示波器的理想替代品。数字化仪具备诸多特点,使其在多个应用场景下表现出色,逐渐取代传统的示波器。本期文章将探讨数字化仪相对于示波器的优势,以及其哪些特点使其成为示波器的理想替代品。 简介…

【Datawhale LLM学习笔记】一、什么是大型语言模型(LLM)

文章目录 1. 什么是大模型2. 检索增强生成 RAG一、什么是 RAG二、RAG 的工作流程 3. langChain介绍一、什么是 LangChain二、LangChain 的核心组件 4. 开发 LLM 应用的整体流程一、何为大模型开发二、大模型开发的一般流程三、搭建 LLM 项目的流程简析(以知识库助手…

产品推荐 | 基于Lattice CrossLink-NX FPGA语音和视觉机器学习板

01 产品概述 Lattice Semiconductor CrossLink-NX语音和视觉机器学习板是高性能 – 专为低功耗机器学习应用而设计的电路板,采用CrossLink-NX 40K,这是一款具有AI加速器的强大FPGA。 基于视觉和语音的机器学习应用 – 板载低功耗图像传感器和麦克风以及…

Linux数据库自动备份 - 定时任务发到百度云盘、坚果云、邮箱附件

前言 1. 坚果云的webdav云盘最好! (免费账号每月1G上传流量) 2. 不建议数据库备份文件发送到SMTP邮箱,因为对方服务器非常容易当做垃圾邮件处理,而且发信的SMTP账号会被封禁(实测163发到QQ邮箱被封&…

数据库一个字段对应多个参数值设计

数据库只有一个字段存多个开启(参数值只有开启和关闭的参数) 只有一个参数是设置为1 加一个参数是设置为112 再加一个参数是设置为1214 ..... 依此类推后一个参数的值前面所有参数的和1例如 控制参数1 控制参数2 控制参数3 控制参数4 上面有4个参数…

更改docker镜像下载地址

一.简介 使用指令 sudo docker info 查看本机的docker镜像下载地址为 由于本机的var文件空间不足,因此,想更改他的存储地址,如下 二.开始操作 1.停止Docker服务: 执行命令 sudo systemctl stop docker 以及 sudo systemctl s…

leetcode热题HOT146. LRU 缓存

一、问题描述: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值…

220V转3.3V线性降压芯片WT5100

220V转3.3V线性降压芯片WT5100 WT5100就是那个离线式的稳压器芯片,没有电感的那种。里面内置了650V的大功率MOSFET,启动控制电路,电压控制电路,交流信号检测电路等等。通过切换SEL管脚,它就能输出5V或3.3V的电压。不需…

一本免费开源的电子书籍!这个 71.8k star 的项目,让你轻轻松松学会算法【文末有福利】

话说作为一名程序员,肯定都少不了在准备面试的时候刷 LeetCode 的算法题吧。虽然面试考察的算法题在工作中用到的非常少,但是确实是能让我们对常用的数据结构有更深刻的理解,以及对思维逻辑有很大的提升。不过枯燥的刷题可能让新手无从下手&a…

【Linux网络编程】UDP协议

UDP协议 1.再谈端口号端口号划分认识知名端口号(Well-Know Port Number)两个问题netstatpidof 2.UDP协议2.1UDP的特点2.2面向数据报2.3UDP的缓冲区2.4UDP使用注意事项2.5基于UDP的应用层协议 喜欢的点赞,收藏,关注一下把! 1.再谈端口号 端口…

【Unity优化(二)】渲染优化

https://www.cnblogs.com/alan777/p/6204759.html CPU受限 开启Player Settings中的Graphics jobs。 在Player settings中的Graphics jobs选项决定了Unity是否使用工人线程去执行一些原本需要在主线程或者渲染线程中执行的任务,在支持这个功能的平台上&#xff0…

mysql匹配

文章目录 匹配和正则表达式匹配:like正则表达式:rlike(与regexp完全一样没有区别) 匹配和正则表达式 匹配:like %:用来匹配 0 个或多个字符 _:用来匹配1个字符 SELECT * FROM Websites WHER…

计算方法实验5:对鸢尾花数据集进行主成分分析(PCA)并可视化

任务 iris数据集包含150条数据,从iris.txt读取,每条数据有4个属性值和一个标签(标签取值为0,1,2)。要求对这150个4维数据进行PCA,可视化展示这些数据在前两个主方向上的分布,其中不…

笔记84:关于递归法的一些感悟

题目1:二叉树的前序遍历 链接:. - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(…