基于Java+Swing实现记事本-完美版

news2024/12/24 11:20:10

基于Java+Swing实现记事本-完美版

  • 一、系统介绍
  • 二、功能展示
    • 1.主页
    • 2.文件功能
    • 3.编辑功能
    • 4.格式--功能
    • 5.查看功能
  • 三、系统实现
    • 1. Fontv.java
  • 四、其它
    • 1.其他系统实现
    • 2.获取源码

一、系统介绍

1.主页
2.文件功能
3.编辑功能
4.格式–功能
5.查看功能

二、功能展示

1.主页

在这里插入图片描述

2.文件功能

在这里插入图片描述

3.编辑功能

在这里插入图片描述

4.格式–功能

在这里插入图片描述
在这里插入图片描述

5.查看功能

在这里插入图片描述

在这里插入图片描述

三、系统实现

1. Fontv.java

package com.it;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;


import javafx.scene.layout.Border;

/***
 * 字体设置
 * @author 林沐
 *
 */
public class Fontv extends JDialog {
	private JDialog jd;
	private Font fontd;
	//弹窗0,是
	public static final int CANCEL_OPTION = 0;
	//弹窗1  否
	public static final int APPROVE_OPTION = 1;
	// 字体选择框
	private JList font = null;
	// 样式选择器
	private JList fontstyle = null;
	// 文字大小选择器
	private JList fontsize = null;
	// 所有字体
	private String[] fontArray = null;
	// 所有样式
	private String[] styleArray = { "常规", "粗体", "斜体", "粗斜体" };
	// 所有预设字体大小
	private String[] sizeArray = { "8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36",
			"48","72", "初号", "小初", "一号", "小一", "二号", "小二", "三号", "小三", "四号", "小四", "五号", "小五", "六号", "小六", "七号", "八号" };
	// 上面数组中对应的字体大小
	private int[] sizeIntArray = { 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48,72, 42, 36, 26, 24, 22, 18, 16,
			15, 14, 12, 10, 9, 8, 7, 6, 5 };
	JComboBox cb;// 下拉列表
	// 字体
	private JTextField jft;
	// 字体类型
	private JTextField jft3;
	// 字体大小
	private JTextField jft4;
	// 中文预览
	private JRadioButton cpvw;
	// 英文预览
	private JRadioButton epvw;
	// 数字预览
	private JRadioButton npvw;
	// 确定取消
	private JButton confirm, cancel;

	// 中文预览的字符串
	private static final String CHINA_STRING = "微软雅黑";

	// 英文预览的字符串
	private static final String ENGLISH_STRING = "Come Baby";

	JLabel gdzt;// 更多字体
	JLabel pvmtxt;// 预览
	//返回
	private int returnValue = CANCEL_OPTION;

	public Fontv() {
		this(new Font("宋体", Font.PLAIN, 12));
	}

	public Fontv(Font f) {
		setTitle("字体");
		this.fontd = f;
		init();
		// 添加监听器
		addListener();
		// 按照预设字体显示
		setup();
		// 基本设置
		setModal(true);
		setResizable(false);
		// 自适应大小
		setSize(550, 625);
	}

	private void init() {
		//窗口内容
		Box bx = Box.createVerticalBox();
		Box bx1 = Box.createHorizontalBox();
		JLabel jb1 = new JLabel("字体(F):");
		jb1.setFont(new Font("楷体", Font.PLAIN, 20));
		JLabel jb2 = new JLabel("字形(Y):");
		jb2.setFont(new Font("楷体", Font.PLAIN, 20));
		JLabel jb3 = new JLabel("大小(S):");
		jb3.setFont(new Font("楷体", Font.PLAIN, 20));
		bx1.add(Box.createHorizontalStrut(15));
		bx1.add(jb1);
		bx1.add(Box.createHorizontalStrut(163));
		bx1.add(jb2);
		bx1.add(Box.createHorizontalStrut(100));
		bx1.add(jb3);
		bx1.add(Box.createHorizontalStrut(95));
		Box bx11 = Box.createHorizontalBox();
		Box bx2 = Box.createVerticalBox();
		jft = new JTextField();//字体
		jft.setFont(new Font("宋体",Font.PLAIN,20));
		jft.setPreferredSize(new Dimension(220, 35));
		jft.setMaximumSize(new Dimension(220, 35));
		jft.setMinimumSize(new Dimension(220, 35));
		jft.setEditable(false);
		GraphicsEnvironment eq = GraphicsEnvironment.getLocalGraphicsEnvironment();//得到系统字体
		fontArray = eq.getAvailableFontFamilyNames();
		font = new JList(fontArray);//字体
		font.setFont(new Font("宋体", Font.PLAIN, 20));
		JScrollPane sp1 = new JScrollPane(font);
		sp1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//去掉下面滚动条
		sp1.setPreferredSize(new Dimension(220, 145));
		sp1.setMaximumSize(new Dimension(220, 145));
		bx2.add(jft);
		bx2.add(sp1);

		Box bx3 = Box.createVerticalBox();
		jft3 = new JTextField();
		jft3.setFont(new Font("宋体",Font.PLAIN,20));
		jft3.setPreferredSize(new Dimension(167, 35));
		jft3.setMaximumSize(new Dimension(167, 35));
		jft3.setMinimumSize(new Dimension(167, 35));
		jft3.setEditable(false);
		fontstyle = new JList(styleArray);
		fontstyle.setFont(new Font("宋体", Font.PLAIN, 20));
		bx3.add(jft3);
		JScrollPane sp2 = new JScrollPane(fontstyle);
		sp2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//去掉下面的滚动条
		sp2.setPreferredSize(new Dimension(167, 145));
		sp2.setMaximumSize(new Dimension(167, 145));
		bx3.add(sp2);

		Box bx4 = Box.createVerticalBox();
		jft4 = new JTextField("12");
		jft4.setFont(new Font("宋体",Font.PLAIN,20));
		jft4.setPreferredSize(new Dimension(82, 35));
		jft4.setMaximumSize(new Dimension(82, 35));
		jft4.setMinimumSize(new Dimension(82, 35));
		// 给文字大小文本框使用的Document文档,制定了一些输入字符的规则
		Document doc = new PlainDocument() {
			public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
				if (str == null) {
					return;
				}
				if (getLength() >= 3) {
					return;
				}
				if (!str.matches("[0-9]+") && !str.equals("初号") && !str.equals("小初") && !str.equals("一号")
						&& !str.equals("小一") && !str.equals("二号") && !str.equals("小二") && !str.equals("三号")
						&& !str.equals("小三") && !str.equals("四号") && !str.equals("小四") && !str.equals("五号")
						&& !str.equals("小五") && !str.equals("六号") && !str.equals("小六") && !str.equals("七号")
						&& !str.equals("八号")) {
					return;
				}
				super.insertString(offs, str, a);
				fontsize.setSelectedValue(jft4.getText(), true);
			}
		};
		jft4.setDocument(doc);
		fontsize = new JList(sizeArray);
		fontsize.setFont(new Font("宋体", Font.PLAIN, 20));
		bx4.add(jft4);
		JScrollPane sp3 = new JScrollPane(fontsize);
		sp3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//去掉下拉滚动条
		sp3.setPreferredSize(new Dimension(82, 145));
		sp3.setMaximumSize(new Dimension(82, 145));
		sp3.setMinimumSize(new Dimension(82, 145));
		bx4.add(sp3);

		bx11.add(bx2);
		bx11.add(Box.createHorizontalStrut(20));
		bx11.add(bx3);
		bx11.add(Box.createHorizontalStrut(20));
		bx11.add(bx4);

		Box bx5 = Box.createHorizontalBox();
		pvmtxt = new JLabel(CHINA_STRING);
		pvmtxt.setHorizontalAlignment(JLabel.CENTER);//居中
		JPanel jpn = new JPanel();
		jpn.add(Box.createVerticalStrut(45));
		jpn.add(pvmtxt);
		jpn.setBorder(BorderFactory.createTitledBorder("示例"));//设置标题上边框
		bx5.add(Box.createHorizontalStrut(241));
		bx5.add(jpn);
		jpn.setPreferredSize(new Dimension(270, 90));
		jpn.setMaximumSize(new Dimension(270, 90));
		jpn.setMinimumSize(new Dimension(270, 90));

		Box bx6 = Box.createHorizontalBox();
		JLabel jb = new JLabel("脚本(R):");
		jb.setFont(new Font("宋体", Font.PLAIN, 20));
		bx6.add(Box.createHorizontalStrut(55));
		bx6.add(jb);

		Box bx7 = Box.createHorizontalBox();
		String[] sf = { "中文", "西欧语言"};//下拉框的内容
		cb = new JComboBox(sf);//下拉框
		cb.setFont(new Font("宋体", Font.PLAIN, 20));
		cb.setPreferredSize(new Dimension(269, 30));
		cb.setMaximumSize(new Dimension(269, 30));
		cb.setMinimumSize(new Dimension(269, 30));
		bx7.add(Box.createHorizontalStrut(240));
		bx7.add(cb);
		cb.setSelectedIndex(0);//默认是选择中文
		
		//下拉框的监听事件
		cb.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent e) {
				// TODO Auto-generated method stub
				// 当下拉框的某个选项被选中时
				if (cb.getSelectedIndex() == 0) {
					pvmtxt.setText(CHINA_STRING);//设置中文
				} else if (cb.getSelectedIndex() == 1) {
					pvmtxt.setText(ENGLISH_STRING);//设置英文
				}
			}

		});
		
		Box bx8 = Box.createHorizontalBox();
		gdzt = new JLabel("<html><u>更多字体<u/><html/>");
		gdzt.setFont(new Font("宋体", Font.PLAIN, 20));
		Color c = new Color(0, 127, 222);//蓝色
		gdzt.setForeground(c);//设置颜色
		bx8.add(Box.createHorizontalStrut(25));
		bx8.add(gdzt);
		
		//标签点击事件
		gdzt.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent evt) {
				//跳转浏览器的字体
				try {
					java.awt.Desktop.getDesktop()
							.browse(new java.net.URI("https://www.17font.com/fonts/diannaoshangziti"));
				} catch (IOException | URISyntaxException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});

		// confirm,cancel  确定  取消
		Box bx9 = Box.createHorizontalBox();
		confirm = new JButton("  确定  ");
		confirm.setFont(new Font("宋体", Font.PLAIN, 20));
		cancel = new JButton("  取消  ");
		cancel.setFont(new Font("宋体", Font.PLAIN, 20));

		bx9.add(Box.createHorizontalStrut(295));
		bx9.add(confirm);
		bx9.add(Box.createHorizontalStrut(10));
		bx9.add(cancel);

		bx.add(Box.createVerticalStrut(20));
		bx.add(bx1);
		bx.add(Box.createVerticalStrut(-1));
		bx.add(bx11);
		bx.add(Box.createVerticalStrut(40));
		bx.add(bx5);
		bx.add(Box.createVerticalStrut(10));
		bx.add(bx6);
		bx.add(Box.createVerticalStrut(5));
		bx.add(bx7);
		bx.add(Box.createVerticalStrut(50));
		bx.add(bx8);
		bx.add(Box.createVerticalStrut(20));
		bx.add(bx9);
		bx.add(Box.createVerticalStrut(10));
		getContentPane().add(bx);//添加箱子
	}
	//字体设置内容
	private void setup() {
		String fontName = fontd.getFamily();//得到字体名称
		int fontStyle = fontd.getStyle();//得到字体样式
		int fontSize = fontd.getSize();//得到字体的大小
		/*
		 * 如果预设的文字大小在选择列表中,则通过选择该列表中的某项进行设值,否则直接将预设文字大小写入文本框
		 */
		boolean b = false;
		for (int i = 0; i < sizeArray.length; i++) {
			if (sizeArray[i].equals(String.valueOf(fontSize))) {
				b = true;
				break;
			}
		}
		if (b) {
			// 选择文字大小列表中的某项
			fontsize.setSelectedValue(String.valueOf(fontSize), true);
		} else {
			jft4.setText(String.valueOf(fontSize));
		}
		// 选择字体列表中的某项
		font.setSelectedValue(fontName, true);
		// 选择样式列表中的某项
		fontstyle.setSelectedIndex(fontStyle);
		// 预览默认显示中文字符
//        chinaButton.doClick();    
		// 显示预览
		setPreview();
	}
	
	//监听事件
	private void addListener() {
		jft4.addFocusListener(new FocusListener() {
			public void focusLost(FocusEvent e) {
				setPreview();
			}

			public void focusGained(FocusEvent e) {
				jft4.selectAll();
			}
		});
		// 字体列表发生选择事件的监听器
		font.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				if (!e.getValueIsAdjusting()) {
					jft.setText(String.valueOf(font.getSelectedValue()));
					// 设置预览
					setPreview();
				}
			}
		});
		fontstyle.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				if (!e.getValueIsAdjusting()) {
					jft3.setText(String.valueOf(fontstyle.getSelectedValue()));
					// 设置预览
					setPreview();
				}
			}
		});
		fontsize.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				if (!e.getValueIsAdjusting()) {
					if (!jft4.isFocusOwner()) {
						jft4.setText(String.valueOf(fontsize.getSelectedValue()));
					}
					// 设置预览
					setPreview();
				}
			}
		});
		// 确定按钮的事件监听
		confirm.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 组合字体
				fontd = groupFont();
				// 设置返回值
				returnValue = APPROVE_OPTION;
				// 关闭窗口
				disposeDialog();
				
			}
		});
		// 取消按钮事件监听
		cancel.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				disposeDialog();
			}
		});
	}
	
	//窗口显示
	public final int showFontDialog(JFrame owner) {
		setLocationRelativeTo(owner);
		setVisible(true);
		return returnValue;
	}
	//得到返回的字体
	public final Font getSelectFont() {
		return fontd;
	}
	
	//窗口关闭
	private void disposeDialog() {
		Fontv.this.removeAll();
		Fontv.this.dispose();
	}
	
	//提示错误
	private void showErrorDialog(String errorMessage) {
		JOptionPane.showMessageDialog(this, errorMessage, "错误", JOptionPane.ERROR_MESSAGE);
	}
	
	//设置显示文本
	private void setPreview() {
		Font f = groupFont();
		pvmtxt.setFont(f);
	}
	
	//得到返回的字体
	private Font groupFont() {
		String fontName = jft.getText();
		int fontStyle = fontstyle.getSelectedIndex();
		String sizeStr = jft4.getText().trim();
		// 如果没有输入
		if (sizeStr.length() == 0) {
			showErrorDialog("字体(大小)必须是有效“数值!");
			return null;
		}
		int fontSize = 0;
		// 通过循环对比文字大小输入是否在现有列表内
		for (int i = 0; i < sizeArray.length; i++) {
			if (sizeStr.equals(sizeArray[i])) {
				fontSize = sizeIntArray[i];
				break;
			}
		}
		// 没有在列表内
		if (fontSize == 0) {
			try {
				fontSize = Integer.parseInt(sizeStr);
				if (fontSize < 1) {
					showErrorDialog("字体(大小)必须是有效数值!");
					return null;
				}
			} catch (NumberFormatException nfe) {
				showErrorDialog("字体(大小)必须是有效数值!");
				return null;
			}
		}
		return new Font(fontName, fontStyle, fontSize);//返回得字体内容 ,字体样式, 字体大小
	}
}

四、其它

1.其他系统实现

Java+Swing实现学生选课管理系统
Java+Swing实现学校教务管理系统
Java+Swing+sqlserver学生成绩管理系统
Java+Swing用户信息管理系统
Java+Swing实现的五子棋游戏
基于JavaSwing 银行管理系统
Java+Swing+mysql仿QQ聊天工具
Java+Swing 聊天室
Java+Swing+dat文件存储实现学生选课管理系统
Java+Swing可视化图像处理软件
Java+Swing学生信息管理系统
Java+Swing图书管理系统
Java+Swing图书管理系统2.0
基于java+swing+mysql图书管理系统3.0
大作业-基于java+swing+mysql北方传统民居信息管理系统

2.获取源码

点击下载
基于Java+Swing实现记事本-完美版

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

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

相关文章

一文带你弄清Map集合及其实现类(适合小白秋招篇)

前言&#xff1a; 本篇文章主要讲解Java中的Map集合接口以及相关实现类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以…

【Linux】冯诺依曼体系结构 操作系统 进程概念

目录 一、冯诺依曼体系结构 二、操作系统 1、概念 2、设计OS的目的 三、进程 1、基本概念 2、描述进程-PCB 3、组织进程 4、查看进程和终止 5、通过系统调用获取进程标识符 6、通过系统调用创建进程-fork 7、进程状态 8、特殊进程 8.1 僵尸进程 8.2 孤儿进程 一、冯诺依曼体…

【从零开始学习JAVA | 第八篇】String类

目录 前言&#xff1a; String类&#xff1a; 常见的认识误区&#xff1a; 创建String类&#xff1a; 注意点&#xff1a; 总结&#xff1a; 前言&#xff1a; String类是Java中最常见的一个类&#xff0c;本篇将对Stirng类的各种功能进行详细的介绍&#xff0c;各位小伙伴…

js:使用vue-codemirror实现一个语法高亮的网页代码编辑器

codemirror code editor component for vuejs 译文&#xff1a;vuejs的codemirror代码编辑器组件 文档 https://github.com/surmon-china/vue-codemirror 安装 # 依赖 pnpm install codemirror vue-codemirror --save# 语言 pnpm install codemirror/lang-json --save pnpm …

【VulnHub系列】MyFileServer

因为是从PDF转换过来偶尔可能会出现内容缺少&#xff0c;可以看原版PDF&#xff1a;有道云笔记 实验环境 Kali&#xff1a;192.168.10.102 MyFileServer&#xff1a;192.168.10.106 实验过程 通过arp-scan来发现靶机的IP地址 sudo arp-scan --interface eth0 192.168.10.1…

mediapipe 谷歌高效ML框架-图像识别、人脸检测、关键点检测

参考&#xff1a; https://github.com/google/mediapipe https://developers.google.com/mediapipe/solutions/guide 框架也支持cv、nlp、audio等项目&#xff0c;速度很快&#xff1a; 1、图形识别 参考&#xff1a;https://developers.google.com/mediapipe/solutions/vi…

【从零开始学习JAVA | 第九篇】字符串综合练习

前言&#xff1a; 在前一篇我们学习了String类以及两个接口函数&#xff0c;今天我们将利用昨天的知识以及讲解新的方法进行几个实战操作&#xff0c;以此来巩固我们的所学内容。 1.实现用户登录&#xff0c;对用户输入的密码进行验证 需求&#xff1a;已知正确的用户名和密码…

31 linux 中 用户栈帧 -> 内核栈帧

前言 比如 我们之前调试的 glibc 相关的库函数 glibc 相关是属于用户程序, 调用 操作系统的系统调用的时候, 会是 怎么样的一个情况呢? 系统调用 会有对应的系统栈帧来处理 系统调用的相关函数调用的堆栈支持 测试用例 我们这里主要是以 printf 中会分配缓冲区调用 ma…

NVIDIA Thrust教程

NVIDIA Thrust教程 Thrust 的 API 参考指南&#xff0c;CUDA C 模板库。 1.简介 Thrust 是基于标准模板库 (STL) 的 CUDA 的 C 模板库。 Thrust 允许您通过与 CUDA C 完全互操作的高级接口&#xff0c;以最少的编程工作实现高性能并行应用程序。 Thrust 提供了丰富的数据并…

windows自带的linux系统,从C盘迁移到D盘

1. 查看当前wsl版本和 运行状态 wsl -l -v wsl --list, -l 用于列出分发 本人电脑装的是Ubuntu-18.04&#xff0c;正在运行&#xff0c;版本1 2. 在D盘建linux目录&#xff0c;打包Ubuntu-18.04&#xff0c;导入到D盘的linux目录 wsl --export <DistributionName> &l…

9个最实用的PS插件盘点!

因为个人原因&#xff0c;对PS的插件用了不下 100 款&#xff0c;其中有好有坏&#xff0c;有优有劣&#xff0c;大浪淘沙&#xff0c;优胜劣汰&#xff0c;现在整理了自己觉得不错的 PS 插件。 1、Alien Skin Blow Up 3 for mac Blow Up 3 mac 版是 Macos 上一款 PS 图像无损放…

Apache Zeppelin系列教程第十篇——SQL Debug In Zeppelin

SQL Debug介绍 首先介绍下什么是SQL Debug&#xff1f; 但是经常有这样一个需求&#xff0c;一大段sql 跑出来之后&#xff0c;发现不是自己想要的结果&#xff1f;比如&#xff1a; demo 1: select id,name from ( select id,name from table1 union all select id,name fr…

web漏洞之文件上传漏洞

文章目录 一、漏洞原因二、漏洞危害三、漏洞利用1.三个条件2.利用方式3.绕过方式a.绕过JS验证① BP绕过② F12绕过③ 菜刀上传实操 b.绕过MIME-Type验证c.绕过黑名单验证① 直接修改后缀名绕过② htaccess绕过(有拦截)③ 大小写绕过(有拦截)④ 空格绕过⑤ .号绕过⑥ 特…

技术改变生活,开发者必须掌握这些技能

技术改变生活&#xff0c;开发者必须掌握这些技能 一、前言二、背景三、开发者必须掌握这些技能1. 语言与编程2. 数据结构与算法3. 开发框架与工具4. 应用开发与测试5. 团队协作与沟通 一、前言 随着科技的不断进步和发展&#xff0c;我们的生活方式也在不断地变化。互联网、智…

Session覆盖测试-业务安全测试实操(19)

弱Token设计缺陷测试,Session覆盖测试 Session覆盖测试 测试原理和方法 找回密码逻辑漏洞测试中也会遇到参数不可控的情况,比如要修改的用户名或者绑定的手机号无法在提交参数时修改,服务端通过读取当前session会话来判断要修改密码的账号,这种情况下能否对Session中的内容做…

【架构】洋葱架构

文章目录 前言一、为什么要用洋葱架构&#xff1f;二、原则2.1、依赖性2.2、数据封装2.3、关注点的分离2.4、耦合性 三、洋葱架构层四、领域模型/实体五、领域服务六、应用服务七、基础设施服务八、可观察性服务九、测试策略十、微服务十一、模块化与打包十二、框架、客户端和驱…

基于Java个人博客网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

基于Java游戏攻略网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

【Unityc#专题篇】之c#进阶篇

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

【C#进阶】C# 索引器

序号系列文章13【C#进阶】C# 特性14【C#进阶】C# 反射15【C#进阶】C# 属性 文章目录 前言1、索引器的概念2、索引器的定义3、索引器的基本使用4、索引器的重载5、接口中的索引器6、属性和索引器之间的比较7、索引器的适用场景结语 前言 &#x1f342; Hello大家好啊&#xff0c…