{"id":24054411,"url":"https://github.com/mintoneko/java_function_draw","last_synced_at":"2026-02-25T02:31:09.043Z","repository":{"id":255773220,"uuid":"853583039","full_name":"mintoneko/Java_Function_Draw","owner":"mintoneko","description":"Java简易函数图像绘制工具，Java课设","archived":false,"fork":false,"pushed_at":"2024-12-02T12:57:11.000Z","size":87164,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-29T05:33:27.498Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mintoneko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-07T00:56:09.000Z","updated_at":"2024-12-27T05:14:01.000Z","dependencies_parsed_at":"2025-04-22T19:16:32.246Z","dependency_job_id":null,"html_url":"https://github.com/mintoneko/Java_Function_Draw","commit_stats":null,"previous_names":["mobaisilent/java_function_draw","mobaitech/java_function_draw","mintoneko/java_function_draw"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mintoneko/Java_Function_Draw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mintoneko%2FJava_Function_Draw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mintoneko%2FJava_Function_Draw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mintoneko%2FJava_Function_Draw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mintoneko%2FJava_Function_Draw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mintoneko","download_url":"https://codeload.github.com/mintoneko/Java_Function_Draw/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mintoneko%2FJava_Function_Draw/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29809086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T22:43:48.403Z","status":"online","status_checked_at":"2026-02-25T02:00:07.329Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-09T03:05:00.040Z","updated_at":"2026-02-25T02:31:09.016Z","avatar_url":"https://github.com/mintoneko.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e Java课设项目，虽不复杂，却意义深远。\n\n## 功能说明\n\n### 基本功能\n\n1. **选择与输入函数**\n   - 在下拉选项框中选择需要处理的函数编号。\n   \n   - 在文本框中输入函数表达式后，按回车键保存函数信息。\n   \n   - 点击 OK 按钮绘制函数图像。\n   \n2. **支持的函数表达式**\n   - 函数表达式可以是 y=f(x) 的形式，也可以直接使用 f(x) 的形式。\n   \n3.\t**缩放功能**\n\n   - 点击 Enlarge 按钮可放大图像，点击 Reduce 按钮可缩小图像。\n\n   - 也可以通过鼠标滚轮调整缩放比例：\n\n   - 向上滚动放大图像。\n\n   - 向下滚动缩小图像。\n\n4. **清空图像**\n\n   - 点击 Clear 按钮清空当前绘制的函数图像，并重置缩放比例。\n\n5. **多函数绘制**\n\n   - 通过上下箭头键切换要绘制的函数编号。\n\n   - 支持同时绘制最多三个有效函数。\n\n6. **验证与清除函数**\n\n   - 根据弹出对话框确认函数表达式是否有效。\n\n   - 如需清除某个函数，在对应选项框的文本区域中删除内容或输入空格即可。\n\n7. **保存图像**\n\n   - 点击 OK 按钮后，不仅绘制函数图像，还会将图像保存到项目目录下的 images 文件夹中，文件以日期和时间命名以便区分。\n\n### 注意事项\n\n1. **函数表达式书写规则**\n\n   - 系统支持省略乘号：如 xx 等同于 x^2，xxx 等同于 x^3。\n\n   - 对于三角函数，sinx 等同于 sin(x)，但表达式 sinx+1 视为 sin(x+1)，与 sin(x)+1 不同。\n\n   - 为确保系统正确解析函数，建议严格书写函数表达式。\n\n2. **支持的函数形式**\n\n   - 可以使用 y=f(x) 或 f(x) 表达形式，均可被正确识别。\n\n## 项目流程\n\n1. **使用 Java 绘图 AWT 和 SWING**\n   - 本项目使用 Java 的 AWT 和 SWING 库进行绘图操作。\n\n2. **插件主窗口**\n   - 创建主窗口 `JFrame jf`。\n\n3. **设置布局管理器**\n   - 将主窗口的布局管理器设置为 `BorderLayout()`。\n\n4. **创建下拉选择框**\n   - 创建下拉选择框 `functionChooser`，包含三个选项 `function1`、`function2` 和 `function3`，用于区分三个函数的输入和保存信息。\n\n5. **创建容器 jPanel1**\n   - 创建容器 `jPanel1`，并向其中添加两个文本域：\n     - `tips`：不可更改的提示文本域。\n     - `functionField`：函数输入文本域。\n   - 在两个文本域中间添加下拉选择框 `functionChooser`，用于解析和绘制输入的文本。\n   - 添加一个 `okButton` 按钮，并为其添加监控器，当按下 `okButton` 时解析并绘制函数。\n\n6. **将 jPanel1 添加到主窗口**\n   - 将 `jPanel1` 添加到主窗口 `jf` 的 SOUTH 位置。\n\n7. **创建容器 jPanel2**\n   - 创建容器 `jPanel2`，并向其中添加一个画布对象 `mc`（`MyCanvas` 继承自 `Canvas`）。\n   - 将 `jPanel2` 置于主窗口 `jf` 的 CENTER 位置。\n\n8. **创建容器 jPanel3**\n   - 创建容器 `jPanel3`，并向其中添加三个按钮：\n     - `biggerButton`：放大按钮。\n     - `smallerButton`：缩小按钮。\n     - `clearButton`：清空按钮。\n   - 为这三个按钮创建方法添加监控器，分别实现放大、缩小和清空功能。通过一个缩放比例参数 `scale` 实现缩放，并向 `jPanel3` 添加文本域 `scaleShow`，实时展示用户调节后的 `scale`。\n\n9. **将 jPanel3 添加到主窗口**\n   - 将 `jPanel3` 添加到主窗口 `jf` 中，并分别设置主窗口的长宽度、可见性、默认关闭方式，使其位于 Windows 窗口的中间位置。\n\n## 四个类解释\n\n### 1.FunctionDraw 类\n\n主类，实现主要功能，最主要的方法为其中的 `init()` 方法，将设置的变量初始化，实现各种监控器功能以及绘图功能。\n\n### 2.FunctionSolution 类\n\n主要用于处理函数，计算函数，其中包含 3 个方法：\n\n1. `getFunction` 方法用来解析函数文本域，用来获取函数解析式，解析 `y=f(x)` 和 `f(x)` 两种格式。\n2. `checkFunction` 方法用来检查函数是否正确，调用了 `exp4j` 包的 `Expression` 类来解析表达式。\n3. `calculateFunction` 方法用来计算函数值，将 `Expression` 里面的 `x` 变量值更改实现计算功能。\n\n### 3.ShowDialog 类\n\n主要包含五个方法：\n\n1. `showEnterWarningDialog` 方法\n2. `showEmptyWarningDialog` 方法\n3. `showScaleMessageDialog` 方法\n4. `showThreeFunctionsEmpty` 方法\n5. `showFunctionSavedDialog` 方法\n\n分别实现弹出函数输入错误警告对话框、函数输入为空警告对话框、缩放过度警告对话框、三个函数均为空警告对话框、函数已保存提示对话框。\n\n### 4.FunctionSave 类\n\n主要包含 `saveImage` 方法，实现将绘制的函数保存到 `images` 对应的文件中，实现原理见代码原理的最后一部分。\n\n## 项目架构\n\n```\n.\n├── FunctionDraw.iml\n├── images\n│   └── 2023-12-12\n│       └── 21-29-21\n│           ├── functions.txt\n│           └── image.jpg\n├── resources\n│   ├── FunctionDraw.java\n│   ├── FunctionSave.java\n│   ├── FunctionSolution.java\n│   ├── ShowDialog.java\n│   └── exp4j-0.4.8.jar\n└── src\n    ├── META-INF\n    │   └── MANIFEST.MF\n    ├── lib\n    │   └── exp4j-0.4.8.jar\n    └── practice\n        ├── FunctionDraw.java\n        ├── FunctionSave.java\n        ├── FunctionSolution.java\n        └── ShowDialog.java\n\n9 directories, 14 files\n```\n\nimages保存绘制的结果，按照时间自动创建文件夹，时间格式为：年-月-日，然后下一级就是每次绘制的时间点：时-分-秒\n\n- functions.txt为绘制的函数\n- image为绘制的函数图片\n\n\u003e Java项目打包工具：\n\u003e\n\u003e https://www.ej-technologies.com/exe4j/download\n\u003e\n\u003e 使用教程可在B站上找到，打包时注意打包依赖（jre）和不打包依赖（依靠机器系统环境）两种情况。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmintoneko%2Fjava_function_draw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmintoneko%2Fjava_function_draw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmintoneko%2Fjava_function_draw/lists"}