用Java实现好玩的可DIY的音乐计算器v0.33

特点:个性化,定制化,可简单DIY;

(不是什么程序都能简单DIY;)

一、功能简介:

  1. 计算器菜单&按键板功能:
    加减乘除四则运算,十六进制"hex"计算,带"pi"与"e"的常数计算(如圆和球体),带括号的公式计算"f(x)",高次幂与开方计算,常用对数与自然对数计算,三角函数计算,阶乘与倒数计算,时间计算;(可简单DIY)
  2. 常数查询:常用"Maths"数学常数,常用"Physics"物理常数;(可简单添加)
  3. 预定义三种界面:(待实现, 详见v0.33预置菜单)
    a. 典型界面"Typical"; (不可DIY)
    b. 个性化界面"Personal"; (可DIY)
    c. 科学计算器"Scientific"; (可DIY)
    d. 界面可拖拉变形: (见后面图, 可复位到启动界面)
  4. 时钟功能; 日历查询&时间计算功能:
    a. 时钟日历显示; (见后面图, 时间/日期/星期/周数)
    b. 时钟日历查询; (v0.34后逐步完善)
    c. 时钟日历计算; (v0.34后逐步完善)
    d. midi音乐报时钟; (与midi配合,可DIY音乐)
    e. 语音报时钟; (定时提醒功能, 语音素材准备中)
  5. 实时天气查询功能:(需联网,包括室内外温/湿度/PM2.5)
  6. Midi功能: (或将集成到v0.35)
    a. midi音乐播放功能; (播放已有".mid"文件)
    b. midi音乐简谱编曲功能; (见图,参考本博客相关文章)
    c. midi音乐简易键盘功能; (类似电子琴自动和弦&节拍)
  7. 示例演示: (相当于帮助说明, 包括预置查询资料)
  8. 版本计划:v1.00将是完整版,到时将具备以上绝大部分功能;以后或扩充或完善不确定。

二、菜单实现:

  1. Java的优势: 比C++/C实现简单,比Python速度快,且应用更广泛。
  2. Java的菜单:利用可变长度的二维或多维数组做菜单特别方便,可以轻松做出复杂的菜单;(参看后面菜单定义的源代码)

三、对话框实现:

1. 对话框信息:

 //对话框定义;物主:frame;模式:true;private Dialog  about = new Dialog(frame,"关于",true);private Label    info  = new Label("Auther:yy-2020",Label.CENTER);

2. 对话框实现:

 //v0.34;定义"关于"对话框about;v0.33新增;private void aboutInit() {about.setSize(100,70);about.setLocationRelativeTo(frame);           //位置跟随;关联frame;about.setResizable(false);                 //默认true;about.add(info,BorderLayout.CENTER);        //,"Center";   about.addWindowListener(new MyWinListen());    //注册窗口监听器;MyWinListen;about.setVisible(true);}

3. 对话框启动:

case "About": aboutInit();break;

4. 对话框关闭:

对话框about直接关闭即可,只有主窗口(frame)才完全退出;

//v0.33;20221001;退窗口事件响应类;//exit.addActionListener(e->System.exit(0));   class MyWinListen extends WindowAdapter{        public void windowClosing(WindowEvent e){e.getWindow().setVisible(false);       //关闭窗口;e.getWindow().dispose();              //释放资源;if(e.getSource()==frame)System.exit(0);                     //完全退出;}}

四、部分源码:

 展示菜单实现原理;

(参考上一篇v0.32的完整源码,预留按钮为DIY参考)

//v0.34menu+midi;20220926;DbY多功能计算器。【更少代码&更多功能】
package calculator;import java.awt.*;
import java.awt.event.*;public class Calculate {//------------------------------------  //v0.30;20220918;定义全局变量; double  num1,num2,mem;                  //操作数&中间记忆,均为double;boolean isNum;                            //数字拼接标志位,转存后失效;String    Oper;                           //二元计算操作符,依赖"="计算;TextField    tfResult;                   //显示结果;可编辑,由C按键复制后清空;TextArea  taRecord;                   //显示记录;可编辑复制;用CR按键清空;//v0.33;20220930;定义窗体软键盘布局;(用于鼠标和触摸屏操作)【核心定义】//预置按钮;tone音色,tune音调,octave八度,sustain延音,tempo拍子速度;chord和弦;private final String []KEYS = {                            "temp"    ,"f(x)"   ,"n!" ,"("  ,"d"  ,"e"  ,"f"  ,"x^y","tone"   ,"log1"   ,"cbrt"   ,")"  ,"a"  ,"b"  ,"c"  ,"%", "tune"    ,"tan"    ,"sqrt"   ,"MC" ,"7"  ,"8"  ,"9"  ,"/", "oct" ,"cos"    ,"x^3"    ,"M"  ,"4"  ,"5"  ,"6"  ,"*","sus"  ,"sin"    ,"x^2"    ,"E"  ,"1"  ,"2"  ,"3"  ,"-", "chrd"    ,"rand"   ,"1/x"    ,"PI" ,"0"  ,"."  ,"-/+"   ,"+","midi"    ,"time"   ,"dec"    ,"hex"    ,"CR" ,"C"  ,"BS" ,"=",            };//定义键盘属性;private final int kRow = 7;                      //定义按键行数6;private final int kCol = 8;                       //定义按键列数5;private final int nKeys=KEYS.length;////------------------------------------//定义菜单;v0.33新增;//constant;mathematics,physics;//example;计算球体示例,midi编曲示例;private final String [][]MENUcn = {                          {"文件","打开","保存","退出"},{"常数","数学","物理"},               {"选项","典型","个性","科学","重置"},{"帮助","示例","关于"}};   private final String [][]MENU = {                          {"File","Open","Save","Exit"},{"Constant","Maths","Physics"},             {"Option","Typical","Personal","Scientific","Reset"},{"Help","Example","About"}};   //------------------------------------//v0.33;20220930;初始化方法;public void init() {//0.定义框架;主窗口;v0.32最佳推荐(345,200);--v0.3竖置(200,320);Frame frame = new Frame("DbY计算器v0.33");frame.setSize(345,234);             //v0.33最佳推荐(345,234);frame.setBackground(new Color(0,64,96));    //自定义深蓝;推荐Color.lightGray;//frame.setBackground(Color.lightGray);     //设置窗口的背景色;窗口默认背景为白色;frame.setLocationRelativeTo(null);           //将窗口居中;若无该方法,窗口将位于屏幕左上角;      //1.定义菜单;v0.33新增;创建菜单&菜单项,命名@MENU[][];菜单分类创建/注册/放置;MenuBar mb = new MenuBar();Menu []menu = new Menu[MENU.length];MenuItem [][]mItem = new MenuItem[MENU.length][];MyMenuLis mbl = new MyMenuLis(); //自定义菜单执行动作,事件统一响应;【核心类】for (int i = 0; i < MENU.length; i++){menu[i] = new Menu(MENU[i][0]);      //创建菜单;menu[i].addActionListener(mbl);      //监听注册;mb.add(menu[i]);                      //放置菜单;mItem[i] = new MenuItem[MENU[i].length-1];for (int j = 0; j < MENU[i].length-1; j++){mItem[i][j] = new MenuItem(MENU[i][j+1]);   //创建菜单项;                mItem[i][j].addActionListener(mbl); //监听注册;menu[i].add(mItem[i][j]);         //放置菜单项;}}frame.setMenuBar(mb);//2.放置组件;v0.30;三大件即面板/文本区/文本字段,同时注册按钮监听器;//a.面板容器;其中按键选用网格布局;Panel panel = new Panel();            //创建按键面板;panel.setLayout(new GridLayout(kRow,kCol));  //设置布局;网格间距(1,1);frame.add(panel,"East");                    //键盘位置;South/East;//*放置按钮;按钮布局顺序由串组KEYS[]决定;【核心段】Button []keys = new Button[nKeys];    //创建按钮组对象;//MyKeysLis mkl = new MyKeysLis();    //自定义按钮执行动作,事件统一响应;【核心类】for (int i = 0; i < nKeys; i++){keys[i] = new Button(KEYS[i]);         //创建单个按钮,按钮名@KEYS[];keys[i].addActionListener(new MyKeysLis());      //监听注册;自定义按钮动作响应类MyKeysLis;panel.add(keys[i]);                    //放置按钮;每个按钮按KEYS[]顺序;} //b.文本区,可显示多行多列文本和滚动条;taRecord = new TextArea();            //创建文本区,操作记录显示区;taRecord.setEditable(true);                   //设置输入框允许编辑;taRecord.setColumns(24);                     //设置输入框列数,推荐18字符;taRecord.setRows(5);                         //设置输入框高度,推荐3行字符;frame.add(taRecord,"Center");              //在框架上添加多行输入框;Center/West;//c.文本框,单行文本字段;tfResult = new TextField();                   //文本框,计算结果显示字段;frame.add(tfResult,"North");             //在框架上添加文本框;South/North;//tfResult.setEditable(false);                //文本框不允许修改结果//全局窗口;包括关闭窗口按钮的监听;frame.addWindowListener(new MyWinLis());   //注册窗口监听器;MyWinLisn;      frame.setVisible(true);             //显示框架;}//------------------------------------
//(省略部分参考前文完整代码)
}

五、外观图:

DbY计算器v0.33-03完整界面:简易midi编曲演示

DbY计算器v0.33-02完整界面:显示记录区和全部功能键

DbY计算器v0.33-04完整界面:简易midi编曲与时钟演示

DbY计算器v0.33-05菜单界面:v0.4将预定义三种界面

DbY计算器v0.33-01典型界面:完全隐藏记录区和部分功能键

JavaGUI:多功能计算器(二)--AWT菜单对话框(源码说明)相关推荐

  1. 循序渐进,探寻Excel二次开发.NET源码(3)-ExcelBase类

    循序渐进,探寻Excel二次开发.NET源码(3)-ExcelBase类 --Excel打开关闭打印预览 作者:长江支流 关键字:.NET.Excel.Excel打开.Excel关闭.Excel打印预 ...

  2. 分享一款超多功能工具箱组合微信小程序源码_支持流量主,无需服务器和域名!适合小白

    分享一款超多功能工具箱组合微信小程序源码_支持流量主,无需服务器和域名!适合小白操作! 简介: 超多功能工具箱组合微信小程序功能实用性质特别的高,用户还能覆盖的广一些具体功能列表如下: 1.证件照制作 ...

  3. 分享一款超40款多功能工具箱组合微信小程序源码_支持流量主,聚集市面上大部分功能的小程序,无需服务器和域名!源码拿去!

    分享一款超多功能工具箱组合微信小程序源码_支持流量主,无需服务器和域名!适合小白操作! 简介: 超多功能工具箱组合微信小程序功能实用性质特别的高,用户还能覆盖的广一些具体功能列表如下: 1.证件照制作 ...

  4. 云开发超多功能工具箱组合微信小程序源码/附带流量主功能介绍

    ​ 简介: 这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能,小程序内包含了40余个功能,堪称全能工具箱了,大致功能如下: 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字 ...

  5. 云开发超多功能工具箱组合微信小程序源码/附带流量主

    简介: 这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能,小程序内包含了40余个功能,堪称全能工具箱了,大致功能如下: 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字九宫 ...

  6. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理]基于matlab GUI多功能图像处理系统[含Matlab源码 1876期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  7. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  8. 2023新版 多功能去水印工具微信小程序源码_带流量主功能(已更新)

    简介: 2023新版 多功能去水印工具微信小程序源码_带流量主功能 自带去水印接口的多功能小程序 支持各大平台短视频去水印 支持保存封面,图集,标题等等 支持本地图片去水印 支持图片拼接 支持九宫格切 ...

  9. 二次解析视屏 php,[PHP源码]最新PHP二次视频解析源码 带后台版/13092

    最新PHP二次视频解析源码带后台版,功能强大 主目录文件结构及说明: admin 后台管理目录,请改名 save 数据保存目录,注意:权限必须为755以上,不然无法后台更新配置; cache 文件缓存 ...

  10. Android录屏并利用FFmpeg转换成gif(二)交叉编译FFmpeg源码

    Android录屏并利用FFmpeg转换成gif(二) 写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方 ...

最新文章

  1. Promise - js异步控制神器
  2. Winodws 10 如何安装wget
  3. golang学习笔记:Interface类型断言详情
  4. spring 随笔(一) bean Dependency Injection
  5. 拉丁超立方试验设计_南水北调工程通水 六年惠及超1.2亿人
  6. git注意事项(持续更新中)
  7. JVM Specification 9th Edition (4) Chapter 3. Compiling for the Java Virtual Machine
  8. linux系统自动获取ip地址,Linux系统怎么自动获取ip地址用什么命令
  9. 这是一个鲜为人知,却身怀绝技的神秘工具——幻灯片母版
  10. 数字取证之Autopsy ——合天网安实验室学习笔记
  11. 【实战】在qgis上查看街景照片( go2streetview谷歌街景、go2mapillary)
  12. 高通量基因组测序中,什么是测序深度和覆盖度?
  13. webuploader 手机端上传图片默认打开相机 改为选择相册
  14. j1900安装linux系统,入手J1900改MAC洗白黑群辉的历程
  15. 如何在CentOS 8上安装Docker
  16. 三层交换机与路由器对接
  17. Quick #UE4 Tip (第1周 2020.12.5)
  18. matlab 通讯系统设计与仿真,基于BPSK通信系统的设计与仿真
  19. 3.Single Image Dehazing via MSCNN-HE 论文阅读
  20. Vivado2022.2安装教程

热门文章

  1. sqlalchemy.exc.NoSuchModuleError: Can‘t load plugin: sqlalchemy.dialects:mysql.p ymyql报错
  2. 股票自动交易接口有哪些优点?
  3. Repeater和控件的runat=server分析
  4. mysql cas_CAS SSO一直無法連線到MYSQL
  5. Python-LBM(格子玻尔兹曼)程序源码实例分析—圆柱绕流篇
  6. java尚未初始化变量问题
  7. Python 中的0 和 1 的意思
  8. 有一个fuck叫做wfg,还是大写---python的@修饰符解析
  9. 亿联视频会议WPP20无线辅流传屏器
  10. LinuxProbe第三节课-第七节课学习笔记