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

关于CodeJava的学习笔记——11

一、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();//Hashtablepro.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{@Overridepublic 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+"次");}}
}

相关文章:

关于CodeJava的学习笔记——11

一、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(8…...

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

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

嵌入式八股文学习——虚函数相关知识学习

虚函数 什么是虚函数&#xff1f;虚函数示例解析代码解析&#xff1a; 使用虚函数的注意事项1. 虚函数的声明与定义2. 派生类中的虚函数 哪些函数不能声明为虚函数1. 普通函数&#xff08;非成员函数&#xff09;2. 构造函数3. 内联成员函数4. 静态成员函数5. 友元函数总结 纯虚…...

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…...

物联网开发项目:AS608+ESP32S3+Vue构建指纹识别系统(二)——ESP32部分

一、前言 接着上一篇文章介绍的关于AS608模块的介绍以及关于指纹特征库的提取与导入分析&#xff0c;如果亲自上手了的话&#xff0c;那么对于Arduino IDE和AS608的基本操作已经熟悉了。 在这一个月之中&#xff0c;抛开中途有事耽误了&#xff0c;终于是基本上完成了我们整个项…...

程序化广告行业(46/89):竞价结算规则、底价策略与内部排名解析

程序化广告行业&#xff08;46/89&#xff09;&#xff1a;竞价结算规则、底价策略与内部排名解析 大家好&#xff01;在之前的几篇博客中&#xff0c;我们已经深入探讨了程序化广告的多个重要方面&#xff0c;从基础概念到实际操作流程。我写这些博客的目的&#xff0c;就是希…...

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

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

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

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

Unity 2022.3.x部分Android设备播放视频黑屏问题

Android平台视频兼容性问题很多…类似的黑屏问题真的很头大&#xff0c;总结一些常见问题&#xff1a; 1. 视频文件不支持压缩 如果使用AssetBundle加载视频&#xff0c;这个AssetBundle压缩格式要选None。有人可能会说最新版Unity已经支持bundle压缩下播放视频&#xff0c;稳…...

vLLM 部署 openai whisper 模型实现语音转文字

vLLM 部署 openai whisper 模型实现语音转文字 1. 安装 vLLM2. 启动 openai whisper 模型 1. 安装 vLLM pip install vllm vllm[audio] --pre --extra-index-url https://wheels.vllm.ai/nightly --upgrade2. 启动 openai whisper 模型 CUDA_VISIBLE_DEVICES0 \ VLLM_WORKER_…...

【Zabbix技术系列文章】第④篇——Zabbix 数据可视化

在当今数字化运维时代&#xff0c;面对海量的监控数据&#xff0c;如何从中快速获取有价值的信息至关重要。Zabbix 的数据可视化功能为我们提供了直观、高效的解决方案&#xff0c;它能将复杂的监控数据转化为清晰易懂的图表和仪表盘&#xff0c;助力运维人员迅速发现问题、分析…...

表格数据导出为Excel

环境及插件配置&#xff1a;&#xff08;理论上vue2应该也可以使用&#xff0c;没有试验过&#xff09; "vue": "^3.2.36", "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "file-saver": "^2.…...

Faster-Whisper —— 为语音识别加速的利器

Faster-Whisper —— 为语音识别加速的利器 在语音识别技术迅速发展的今天&#xff0c;OpenAI 的 Whisper 模型因其强大的多语言识别能力和优异的准确率而受到广泛关注。然而&#xff0c;高精度模型往往伴随着高昂的计算开销和较长的推理时间&#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…...

element-ui图片查看器

element-ui图片查看器 调用案例&#xff1a; <el-image-viewerv-if"showViewer":on-close"()>{showViewerfalse}":url-list"imgList" />export default {components: {Banner,el-image-viewer:()>import(element-ui/packages/image/…...

VoIP技术及其与UDP的关系详解

随着互联网的飞速发展&#xff0c;基于IP的语音通信技术&#xff08;Voice over Internet Protocol&#xff0c;简称VoIP&#xff09;已经成为现代通信的重要支柱。从Skype到Zoom&#xff0c;从企业电话系统到智能音箱&#xff0c;VoIP以其低成本、高灵活性和强大的扩展性逐渐取…...

Java中如何保证高并发的数据安全

在Java中保证高并发的数据安全&#xff0c;可以从以下几个方面入手&#xff1a; 1. 锁机制 • synchronized&#xff1a;Java内置的锁机制&#xff0c;用于同步方法或代码块&#xff0c;简单易用&#xff0c;但灵活性较低。 • ReentrantLock&#xff1a;提供了比synchronize…...

DeepSeek原生稀疏注意力(Native Sparse Attention, NSA)算法介绍

李升伟 整理 DeepSeek 提出的原生稀疏注意力&#xff08;Native Sparse Attention, NSA&#xff09;算法是一种创新的注意力机制&#xff0c;旨在解决大语言模型&#xff08;LLM&#xff09;在处理长序列数据时的计算瓶颈问题。NSA 通过结合算法优化和硬件对齐设计&#xff0c…...

Java基础知识总结(1.8)——Java 注解(持续更新)

更新时间&#xff1a;2025-03-31 Web后端专栏&#xff1a;CSDN专栏——理论-Web后端技术博客总目录&#xff1a;计算机技术系列博客——目录页 8.1 注解的概念 8.1.1 定义与作用 Java注解&#xff08;Annotation&#xff09;是Java语言自JDK1.5版本引入的核心特性&#xff0…...

【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;催生了多个高效的方法。然而&#…...

Lambda 表达式是什么以及如何使用

目录 &#x1f4cc; Kotlin 的 Lambda 表达式详解 &#x1f3af; 什么是 Lambda 表达式&#xff1f; &#x1f525; 1. Lambda 表达式的基本语法 ✅ 示例 1&#xff1a;Lambda 基本写法 ✅ 示例 2&#xff1a;使用 it 关键字&#xff08;单参数简化&#xff09; ✅ 示例 3…...

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

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

如何使用 FastAPI 构建 MCP 服务器

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

基于Python的Django框架的手机购物商城管理系统

标题:基于Python的Django框架的手机购物商城管理系统 内容:1.摘要 随着互联网的快速发展&#xff0c;手机购物逐渐成为人们日常生活中不可或缺的一部分。本研究的目的是开发一个基于Python的Django框架的手机购物商城管理系统&#xff0c;以提高购物商城的管理效率和用户体验。…...