• GUI进阶:用Java实现可DIY的音乐计算器v0.33


    用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); 
    
    • 1
    • 2
    • 3
    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);
      	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3. 对话框启动:
    case "About": aboutInit();break;	
    
    • 1
    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()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    6.Docker 容器数据卷
    BUUCTF Web 极客大挑战 2019 EasySQL
    Ubuntu - 用户和权限
    数字化营销:企业营收N倍增长的秘诀
    BUUCTF-----[CISCN 2019 初赛]Love Math
    Linux 下进程间通讯之内存映射详解
    微信发送图片就卡死,发送文件就死机的解决方案
    【机器学习】随机森林(Random Forest,简称 RF):预测光伏电站功率 || 缺失数据处理 || 重复行处理...
    湖南株洲三维扫描检测CNC机加工零件截面检测弧度测量-CASAIM中科广电
    第五十八章 CSP的常见问题 - HTTP请求失败
  • 原文地址:https://blog.csdn.net/weixin_42083255/article/details/127133762