关于CodeJava的学习笔记——11

news2025/4/25 1:55:12

一、GUI

1、最简单的GUI

只有一个按钮的GUI

import java.awt.*;
import javax.swing.*;
public class SimpleGUI{
	JFrame frame;
	Button bt;
	public SimpleGUI(){
		frame = new JFrame("标题栏内容");
		bt = new Button("点我啊");
		frame.add(bt);
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(1);
	}
	public static void main(String[] args){
		new SimpleGUI();
	}
}

2、局部管理器

        (1)BorderLayout

        在添加按钮到容器中的时候,可以在后面传入东西南北中的参数,指定他们的布局 

        将容器划分为东、南、西、北、中五个区域,组件放置在容器的边界位置,组件需添加到指定区域,每个区域只能放置一个组件,但中心区域可随窗口大小变化      

import java.awt.*;
import javax.swing.*;
public class TestBorderLayout{
	JFrame frame;
	JButton east,west,south,north,center;
	public TestBorderLayout(){
		frame = new JFrame("演示如何使用BorderLayout");
		east = new JButton("东邪 - 黄药师");
		west = new JButton("西毒 - 欧阳锋");
		south = new JButton("南帝 - 段智兴");
		north = new JButton("北丐 - 洪七公");
		center = new JButton("中神通 - 王重阳");
		frame.setLayout(new BorderLayout());
		//frame.add(east,"East");
		frame.add(west,"West");
		//frame.add(south,"South");
		frame.add(north,"North");
		frame.add(center);

		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void main(String[] args){
		new TestBorderLayout();
	}
}

        (2)FlowLayout

        按照添加顺序从左到右、从上到下流动布局,组件在一行排满后自动换行,直到所有组件添加完毕。默认居中对齐,可通过构造函数设置其他对齐方式,如LEFT(左对齐)、RIGHT(右对齐)等。

import java.awt.*;
import javax.swing.*;
public class TestFlowLayout{
	JFrame frame;
	JPanel panel;
	JLabel lab1,lab2;
	JTextField username,password;
	JButton register,submit,reset;
	public TestFlowLayout(){
		frame = new JFrame("演示如何使用FlowLayout");
		panel = new JPanel(new FlowLayout());
		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		submit = new JButton("提交登录");
		reset = new JButton("全部重置");

		panel.add(lab1);
		panel.add(username);
		panel.add(lab2);
		panel.add(password);
		panel.add(register);
		panel.add(submit);
		panel.add(reset);

		frame.add(panel);
		frame.setSize(800,80);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);

	}
	public static void main(String[] args){
		new TestFlowLayout();
	}
}

        (3)GridLayout

        将容器分割成纵横分隔的网络,组件按从左到右、从上到下的顺序依次添加到网格中,直到所有组件添加完毕或网格被填满

import java.awt.*;
import javax.swing.*;
public class TestGridLayout{
	JFrame frame;
	JPanel panel;
	JButton[] bts;

	public TestGridLayout(){
		frame = new JFrame("演示如何使用GridLayout");
		panel = new JPanel(new GridLayout(4,9));
		bts = new JButton[36];
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(i<10 ? i+"" : (char)(i+87)+"");
			bts[i].setBackground(new Color(255,255,(int)(Math.random()*30)+226));
			panel.add(bts[i]);
		}
		frame.add(panel);
		frame.setSize(800,240);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);

	}

	public static void main(String[] args){
		new TestGridLayout();
	}
}

3、窗口

        frame = new JFrame("点餐窗体");命名了这个窗口的名字。

import java.awt.*;
import javax.swing.*;
public class OrderFrame{
	JFrame frame;
	JPanel east,south,center,cc,cs;
	JLabel title,total,pic;
	JButton enter,submit,reset;
	List list;
	public OrderFrame(){
		frame = new JFrame("点餐窗体");
		east = new JPanel(new BorderLayout());//东西南北中
		south = new JPanel(new FlowLayout());//居中
		center = new JPanel(new BorderLayout());
		cc = new JPanel(new BorderLayout());
		cs = new JPanel(new FlowLayout());
		
		title = new JLabel("海鲜开会 : 880 元");
		total = new JLabel("当前总共 : 0 元");
		pic = new JLabel(new ImageIcon("海鲜煲.jpg"));
		enter = new JButton("我要点这道菜");
		submit = new JButton("提交菜单");
		reset = new JButton("全部重置");
		list = new List();
		list.add("餐具");
		list.setFont(new Font("宋体",1,18));
		east.add(list);
		south.add(enter);
		south.add(submit);
		south.add(reset);
		south.add(total);
		cs.add(title);
		cc.add(pic);
		
		center.add(cs,"South");
		center.add(cc,"Center");
		frame.add(center,"Center");
		frame.add(east,"East");
		frame.add(south,"South");
		frame.setSize(800,400);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void main(String[] args){
		new OrderFrame();
	}
}
import java.awt.*;
import javax.swing.*;
public class LoginFrame{
	JFrame frame;
	JPanel top,center,bottom;
	JLabel lab1,lab2,pic;
	JTextField username,password;
	JButton register,submit,reset;
	JButton[] bts;
	public LoginFrame(){
		frame = new JFrame("易途盛世大酒店 只能点 餐系统 v0.8");
		top = new JPanel(new FlowLayout());
		center = new JPanel(new BorderLayout());
		bottom = new JPanel(new GridLayout(4,9));
		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		pic = new JLabel(new ImageIcon("enter.jpg"));
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		submit = new JButton("提交登录");
		reset = new JButton("全部重置");
		bts = new JButton[36];
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(i<10 ? i+"" : (char)(i+87)+"");
			bottom.add(bts[i]);
		}


		center.add(pic);
		addAll(top,lab1,username,lab2,password,register,submit,reset);
		frame.add(top,"North");
		frame.add(center);
		frame.add(bottom,"South");
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void addAll(Container ctn,Component ... cs){
		for(Component c : cs){
			ctn.add(c);
		}
	}
	public static void main(String[] args){
		new LoginFrame();
	}
}

4、基础菜单

        在 Java 中,Component 是一个类,属于 java.awt 包。它是所有 AWT(Abstract Window Toolkit)组件的基类。AWT 是 Java 提供的一个用于创建图形用户界面(GUI)的工具包。

        具体来说,Component 类是所有 GUI 元素的超类,例如按钮、标签、文本框等。这些组件可以添加到容器(如 PanelFrame 等)中,以便在窗口中显示和交互。

        在我们撰写这样的布局时,需要大量的使用add方法,因此我们不如自己写一个addAll方法,让我们直接可以一次性添加多个工具,这样可以让我们的代码变的更加简介。

import java.awt.*;
import javax.swing.*;
public class TestMenu{
	JFrame frame;
	JMenuBar bar;
	JMenu m1,m2,m3;
	JMenuItem mi11,mi12,mi13,mi21,mi22,mi31,mi32;
	public TestMenu(){
		frame = new JFrame("演示如何使用菜单");
		bar = new JMenuBar();
		m1 = new JMenu("鲁菜");
		m2 = new JMenu("粤菜");
		m3 = new JMenu("川菜");
		mi11 = new JMenuItem("九转大肠");
		mi12 = new JMenuItem("爆炒腰花");
		mi13 = new JMenuItem("糖醋鲤鱼");
		mi21 = new JMenuItem("龙虎斗");
		mi22 = new JMenuItem("果子狸炖水鱼");
		mi31 = new JMenuItem("开水白菜");
		mi32 = new JMenuItem("毛血旺");
		addAll(m1,mi11,mi12,mi13);
		addAll(m2,mi21,mi22);
		addAll(m3,mi31,mi32);
		addAll(bar,m1,m2,m3);
		frame.setJMenuBar(bar);
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public void addAll(Container ctn,Component ... cs){
		for(Component c : cs){
			ctn.add(c);
		}
	}
	public static void main(String[] args){
		new TestMenu();
	}
}

5、配置文件

        我们可以创建这样的文件结构,大包套小包,这样可以通过一个config文件,来实现整个的数据的获取。

import java.io.*;
import java.util.*;
public class TestProperties{
	public static void main(String[] args)throws Exception{
		Properties pro = new Properties();//Hashtable
		pro.load(new InputStreamReader(new FileInputStream("config.properties"),"GBK"));

		//System.out.println(pro.getProperty("鲁菜"));//get(k)
		Set<String> ks = pro.stringPropertyNames();//keySet()
		for(String k : ks){
			System.out.println(k);
			String fileName = pro.getProperty(k);
			Properties pro2 = new Properties();
			pro2.load(new InputStreamReader(new FileInputStream(fileName)));

			Set<String> ks2 = pro2.stringPropertyNames();
			for(String k2 : ks2){
				System.out.println("    "+k2+pro2.getProperty(k2));
			}

		}
	}
}

6、动态的菜单栏以及前后端实现

import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class OrderFrame{
	JFrame frame;
	JPanel east,south,center,cc,cs;
	JLabel title,total,pic;
	JButton enter,submit,reset;
	java.awt.List list;
	public OrderFrame(){
		frame = new JFrame("点餐窗体");
		createMenu();
		east = new JPanel(new BorderLayout());
		south = new JPanel(new FlowLayout());
		center = new JPanel(new BorderLayout());
		cc = new JPanel(new BorderLayout());
		cs = new JPanel(new FlowLayout());
		title = new JLabel("海鲜煲 : 560 元");
		total = new JLabel("当前总共 : 0 元");
		pic = new JLabel(new ImageIcon("img/海鲜煲.jpg"));
		enter = new JButton("我要点这道菜");
		submit = new JButton("提交菜单");
		reset = new JButton("全部重置");
		list = new java.awt.List();
		list.add("餐具");
		list.setFont(new Font("宋体",1,18));
		east.add(list);
		south.add(enter);
		south.add(submit);
		south.add(reset);
		south.add(total);
		cs.add(title);
		cc.add(pic);
		center.add(cs,"South");
		center.add(cc,"Center");

		frame.add(center,"Center");
		frame.add(east,"East");
		frame.add(south,"South");
		frame.setSize(800,400);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public void createMenu(){
		JMenuBar bar = new JMenuBar();

		
		Properties menuPros = new Properties();
		try(InputStreamReader r = new InputStreamReader(new FileInputStream("cfg/config.properties"),"GBK")){
			menuPros.load(r);
		}catch(Exception e){
			e.printStackTrace();
		}
		Set<String> menuNames = menuPros.stringPropertyNames();
		for(String menuName : menuNames){
			JMenu menu = new JMenu(menuName);
			String fileName = menuPros.getProperty(menuName);

			Properties itemPros = new Properties();
			try(InputStreamReader r = new InputStreamReader(new FileInputStream("cfg/"+fileName),"GBK")){
				itemPros.load(r);
			}catch(Exception e){
				e.printStackTrace();
			}
			Set<String> itemNames = itemPros.stringPropertyNames();
			for(String itemName : itemNames){
				JMenuItem mi = new JMenuItem(itemName);
				menu.add(mi);
			}

			bar.add(menu);
		}
		

		frame.setJMenuBar(bar);
	}
	public static void main(String[] args){
		new OrderFrame();
	}
}
import java.awt.*;
import javax.swing.*;
public class LoginFrame{
	JFrame frame;
	JPanel top,center,bottom;
	JLabel lab1,lab2,pic;
	JTextField username,password;
	JButton register,submit,reset;
	JButton[] bts;
	public LoginFrame(){
		frame = new JFrame("易途盛世大酒店 只能点 餐系统 v0.8");
		top = new JPanel(new FlowLayout());
		center = new JPanel(new BorderLayout());
		bottom = new JPanel(new GridLayout(4,9));
		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		pic = new JLabel(new ImageIcon("img/enter.jpg"));
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		submit = new JButton("提交登录");
		reset = new JButton("全部重置");
		bts = new JButton[36];
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(i<10 ? i+"" : (char)(i+87)+"");
			bottom.add(bts[i]);
		}
		center.add(pic);
		addAll(top,lab1,username,lab2,password,register,submit,reset);
		frame.add(top,"North");
		frame.add(center);
		frame.add(bottom,"South");
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void addAll(Container ctn,Component ... cs){
		for(Component c : cs){
			ctn.add(c);
		}
	}
	public static void main(String[] args){
		new LoginFrame();
	}
}

7、事件监听

        BigEye be = new BigEye();                                    创建一个监听者
        bt.addActionListener(be);                                       让这个监听者看这个按钮的情况

        class BigEye implements ActionListener               创建这个类

        public void actionPerformed(ActionEvent ae)        覆盖这个方法(该方法实现监听的具体功能)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SimpleGUI{
	JFrame frame;
	JButton bt;
	int time;
	long start;
	public SimpleGUI(){
		frame = new JFrame("标题栏内容");
		bt = new JButton("点我啊");
		bt.setFont(new Font("宋体",1,50));
		BigEye be = new BigEye();
		bt.addActionListener(be);
		frame.add(bt);
		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(1);
	}
	public static void main(String[] args){
		new SimpleGUI();
	}
	class BigEye implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent ae){
			if(start == 0){
				start = System.currentTimeMillis();
			}else{
				long now = System.currentTimeMillis();
				if(now - start > 6000){
					JOptionPane.showMessageDialog(frame,"您的APM为:"+time*10);
					return;
				}
			}

			time++;
			bt.setText("我被点了"+time+"次");
		}
	}
}

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

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

相关文章

首个物业plus系列展 2025上海国际智慧物业博览会开幕

AI赋能服务升级&#xff01;首个“物业plus”系列展 2025上海国际智慧物业博览会盛大开幕 3月31日&#xff0c;2025上海国际智慧物业博览会&#xff08;简称“上海物博会”&#xff09;在上海新国际博览中心N4馆隆重开幕。本届展会由广州旭杨国际展览有限公司主办&#xff0c…

rk3586开发版新增系统调用(Android13)

一、前言 最近想学一下kernel和hal,所以买了一块板子,带了个摄像头和屏幕,1100,学习投资了。这个Android内核定一个系统调用感觉是真的麻烦&#xff0c;主要是有一层bionic C&#xff0c;一开始不熟悉的时候还是花了点时间去配置。 二、kernel修改 include/uapi/asm-generic…

OCR第三个方案:PP-OCRv4的初步探索

一、PP-OCR历史简要回顾 先请出PP-OCR官网&#xff0c;理解上有出入的&#xff0c;以官网为准。 1.1 PP-OCR系列历史 PP-OCRv1&#xff08;2020&#xff09;&#xff1a;首创3.5M超轻量模型&#xff0c;奠定两阶段架构基础&#xff08;检测方向分类识别&#xff09;PP-OCRv2…

ICLR 2025 Spotlight:让机器人实现「自主进化」,蚂蚁数科、清华提出具身协同框架 BodyGen

最近&#xff0c;全球 AI 和机器学习顶会 ICLR 2025 公布了论文录取结果&#xff1a;由蚂蚁数科与清华大学联合团队提出的全新具身协同框架 BodyGen 成功入选 Spotlight&#xff08;聚光灯/特别关注&#xff09;论文。 论文出自蚂蚁数科与清华大学兴军亮老师团队合作的科研项目…

第十九章:Python-pyttsx3 库实现文本转语音功能

前言 在开发语音交互应用或需要文本转语音功能的项目时&#xff0c;pyttsx3 是一个非常实用的 Python 库。它支持离线语音合成&#xff0c;无需联网即可将文本转换为语音。本文将详细介绍 pyttsx3 的功能、用法以及常见问题的解决方法&#xff0c;并通过示例代码帮助你快速上手…

SvelteKit 最新中文文档教程(16)—— Service workers

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

Flutter项目之构建打包分析

目录&#xff1a; 1、准备部分2、构建Android包2.1、配置修改部分2.2、编译打包 3、构建ios包3.1、配置修改部分3.2、编译打包 1、准备部分 2、构建Android包 2.1、配置修改部分 2.2、编译打包 执行flutter build apk命令进行打包。 3、构建ios包 3.1、配置修改部分 3.2、编译…

24、网络编程基础概念

网络编程基础概念 网络结构模式MAC地址IP地址子网掩码端口网络模型协议网络通信的过程&#xff08;封装与解封装&#xff09; 网络结构模式 C/S结构&#xff0c;由客户机和服务器两部分组成&#xff0c;如QQ、英雄联盟 B/S结构&#xff0c;通过浏览器与服务器进程交互&#xf…

Mentalab Explore Pro携手 Wearanize + 数据集,推动睡眠科学研究

在神经科学和睡眠研究的领域&#xff0c;精确监测大脑活动是获取深入见解的关键。传统多导睡眠监测&#xff08;PSG&#xff09;设备虽然提供了详尽的数据&#xff0c;但其操作的复杂性和成本限制了其在更广泛场景中的应用。可穿戴技术的兴起提供了一种新的数据收集方式&#x…

基于 RK3588 的 YOLO 多线程推理多级硬件加速引擎框架设计(代码框架和实现细节)

一、前言 接续上一篇文章&#xff0c;这个部分主要分析代码框架的实现细节和设计理念。 基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计&#xff08;项目总览和加速效果&#xff09;-CSDN博客https://blog.csdn.net/plmm__/article/details/146542002?spm1001.2014.300…

【Yolov8部署】 VS2019+opencv+onnxruntime 环境下部署目标检测模型

文章目录 前言一、导出yolov8模型为onnx文件二、VS2019中环境配置三、源码与实际运行 前言 本文主要研究场景为工业场景下&#xff0c;在工控机与工业相机环境中运行的视觉缺陷检测系统&#xff0c;因此本文主要目的为实现c环境下&#xff0c;将yolov8已训练好的检测模型使用o…

论文阅读:Dual Anchor Graph Fuzzy Clustering for Multiview Data

论文地址:Dual Anchor Graph Fuzzy Clustering for Multiview Data | IEEE Journals & Magazine | IEEE Xplore 代码地址&#xff1a;https://github.com/BBKing49/DAG_FC 摘要 多视角锚图聚类近年来成为一个重要的研究领域&#xff0c;催生了多个高效的方法。然而&#…

乐橙R10 AI智能锁:以「技术减法」终结智能家居「参数内卷」

1 行业迷思&#xff1a;当「技术内卷」背离用户真实需求 “三摄猫眼”、“0.3秒人脸解锁”、“DeepSeek大模型”……智能锁行业的营销话术日益浮夸&#xff0c;但用户体验却陷入“功能冗余”与“操作复杂”的泥潭。 一位用户在社交平台直言&#xff1a;“我的智能锁有六个摄像…

如何使用 FastAPI 构建 MCP 服务器

哎呀&#xff0c;各位算法界的小伙伴们&#xff01;今天咱们要聊聊一个超酷的话题——MCP 协议&#xff01;你可能已经听说了&#xff0c;Anthropic 推出了这个新玩意儿&#xff0c;目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。不过别担心&#xff0c;为你的…

当 EcuBus-Pro + UTA0401 遇上 NSUC1500

文章目录 1.前言2.EcuBus-Pro简介2.1 官方地址2.2 概览 3.纳芯微NSUC1500简介3.1 NSUC1500概述3.2 产品特性 4.测试环境5.基础功能5.1 数据发送5.2 数据监控 6.自动化功能6.1 脚本创建6.2 脚本编辑6.3 脚本编辑与测试 7.音乐律动7.1 导入例程7.2 效果展示 ECB工程 1.前言 最近…

【FreeRTOS】裸机开发与操作系统区别

&#x1f50e;【博主简介】&#x1f50e; &#x1f3c5;CSDN博客专家 &#x1f3c5;2021年博客之星物联网与嵌入式开发TOP5 &#x1f3c5;2022年博客之星物联网与嵌入式开发TOP4 &#x1f3c5;2021年2022年C站百大博主 &#x1f3c5;华为云开发…

Deepseek API+Python 测试用例一键生成与导出 V1.0.4 (接口文档生成接口测试用例保姆级教程)

接口文档生成接口测试用例保姆级教程 随着测试需求的复杂性增加,测试用例的设计和生成变得愈发重要。Deepseek API+Python 测试用例生成工具在 V1.0.4 中进行了全方位的优化和功能扩展,特别是对接口测试用例设计的支持和接口文档的智能解析处理。本文将详细介绍 V1.0.4 版本…

CET-4增量表

CET-4词表-增量表 注&#xff1a; 【1】所谓增量&#xff0c;是相对于高中高考之增量 即&#xff0c;如果你是在读大学生&#xff0c;高中英语单词过关了&#xff0c;准备考CET-4&#xff0c;那么侧重下面的增量词表的学习&#xff0c;也算是一条捷径吧 ^_^ 【2】本结果数据 官…

DeepSeek详解:探索下一代语言模型

文章目录 前言一、什么是DeepSeek二、DeepSeek核心技术2.1 Transformer架构2.1.1 自注意力机制 (Self-Attention Mechanism)(a) 核心思想(b) 计算过程(c) 代码实现 2.1.2 多头注意力 (Multi-Head Attention)(a) 核心思想(b) 工作原理(c) 数学描述(d) 代码实现 2.1.3 位置编码 (…

FOC 控制笔记【三】磁链观测器

一、磁链观测器基础 1.1 什么是磁链 磁链&#xff08;magnetic linkage&#xff09;是电磁学中的一个重要概念&#xff0c;指导电线圈或电流回路所链环的磁通量。单位为韦伯&#xff08;Wb&#xff09;&#xff0c;又称磁通匝。 公式为&#xff1a; 线圈匝数 穿过单匝数的…