• 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
  • 相关阅读:
    ROS分布式演练,多台设备进行通信的配置
    Matten:视频生成与Mamba-Attention
    基于模糊小波神经网络的空中目标威胁评估(Matlab代码实现)
    python反序列化分析
    【Node.js---学习小结(2)】
    HHDBCS监控功能
    【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
    mysql数据库基本操作中select查询
    思科确认 Yanluowang 勒索软件泄露被盗公司数据
    leetcode:254. 因子的组合【经典递归 + 新型递归 + 所有可能的因数分解】
  • 原文地址:https://blog.csdn.net/weixin_42083255/article/details/127133762