我是靠谱客的博主 着急帆布鞋,最近开发中收集的这篇文章主要介绍JavaGUI:多功能计算器(二)--AWT菜单&对话框(源码说明),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用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菜单&对话框(源码说明)的全部内容,希望文章能够帮你解决JavaGUI:多功能计算器(二)--AWT菜单&对话框(源码说明)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部