Java声效计算器(带有十进制转二进制和十六进制的功能)

@TOC Java声效计算器(带有十进制转二进制和十六进制的功能)

声明:

这是我们学校老师布置的一次期末课设,我在课下看了一些关于Java用户图形界面的书,又结合北大教授的讲课的内容,完成了这次课设。我对比较难理解的代码和重要代码已经注释,如果我有哪一部分写的不明白的地方请大家在评论区留言。

设计思路:

首先运用swing.JFrame生成框架,再用swing.JPanel生成三个面板,分别用布局管理器对他们进行管理。添加音效,首先得把音效文件放到确定的路径,再把路径按照我写的代码格式编写就OK了。

计算器实现功能:

实现基本的加、减、乘、除等基本用法,除此之外还添加了十进制转二进制和十六进制的功能。
每次按完图形界面上的按钮就会发出声音

代码部分:

package 计算器;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
public class Calculator extends JFrame implements ActionListener {
private final String[] str={
“7”, “8”, “9”, “/”,
“4”, “5”, “6”, “*”,
“1”, “2”, “3”, “-”,
“.”, “0”, “=”, “+”
};
JButton[] buttons =new JButton[str.length];
JButton reset =new JButton(“CE”);
JButton t16 =new JButton(“hex”);
JButton t2 =new JButton(“binary”);
JTextField display = new JTextField(">>>Welcome<<<");

public Calculator() {
	Font font =new Font("Consolas",Font.BOLD,18);//粗体

// add components
JPanel pnlHead = new JPanel(new BorderLayout());
JPanel pnlend = new JPanel(new BorderLayout());
pnlHead.add(display,BorderLayout.CENTER);
pnlHead.add(reset,BorderLayout.EAST);
pnlend.add(t16,BorderLayout.EAST);
pnlend.add(t2,BorderLayout.CENTER);
display.setFont(font);
reset.setFont(font);
t16.setFont(font);
t2.setFont(font);

	JPanel pnlBody =new JPanel(new GridLayout(4,4));
	for(int i=0;i<str.length;i++){
		buttons[i]=new JButton(str[i]);
		buttons[i].setFont(font);
		pnlBody.add(buttons[i]);
	}
	
	getContentPane().setLayout(new BorderLayout());
	getContentPane().add("North", pnlHead);
	getContentPane().add("Center", pnlBody);
	getContentPane().add("South", pnlend);

// set frame properties
for(int i=0;i<str.length;i++)
buttons[i].addActionListener(this);
reset.addActionListener(this);//
display.addActionListener(this);//
t16.addActionListener(this);//
t2.addActionListener(this);

// set frame properties
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(300,300);
setLocation(500, 150);
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent arg0) {
	Object target =arg0.getSource();//定义事件发出的对象
	String cmd = arg0.getActionCommand();//定义事件所发出的对象的名称
	if(target==reset){
		handleReset();
		playMusic1();
		}
	else if(target==t16){ 
		playMusic2();
		BigInteger src = new BigInteger(display.getText());// 
		display.setText(src.toString(16));
	}
	else if(target==t2){
		playMusic2();
		BigInteger src = new BigInteger(display.getText());// 
		display.setText(src.toString(2));
	}
	else if (" 0123456789.".indexOf(cmd)>0){//遍历当前字符串 ***
		handleNumber(cmd);
	    playMusic2();
	}
	else {
		handleOperator(cmd);
	    playMusic2();
	    }
	// TODO Auto-generated method stub

}
boolean isFirstDigit = true;//**
double number = 0.0;
String operator = "=";//

public void handleNumber(String key){
	if(isFirstDigit)
		display.setText(key);
	else if(!key.equals("."))
	    display.setText(display.getText()+key);
	else if(display.getText().indexOf(".")<0)
		display.setText(display.getText()+".");
	isFirstDigit =false;
}//**

public void handleReset(){
	display.setText("Thanks for using it.");
	isFirstDigit =true;
	operator ="=";
}

public void handleOperator(String cmd){
	double dDisplay =Double.valueOf(display.getText());//每次都会附给它!!!**
	switch(operator){
	   case"+":number+=dDisplay;break;
	   case"-":number-=dDisplay;break;
	   case"*":number*=dDisplay;break;
	   case"/":number/=dDisplay;break;
	   case"=":number=dDisplay;break;
	}
	display.setText(String.valueOf(number));
	operator =cmd;
	isFirstDigit = true;
}//***

public void playMusic1(){
	 String path1="D:\\96\\Ce.wav" ;//必须得把路径设置为字符型!!!!
	 try {
		  FileInputStream fileau=new  FileInputStream(path1);
		  AudioStream as=new AudioStream(fileau);
		  AudioPlayer.player.start(as);
		 }
		 catch (Exception e) {
			 e.printStackTrace();
		 }
}

public void playMusic2(){
	 String path2="D:\\96\\Aj.wav" ;//必须得把路径设置为字符型!!!!
	 try {
		  FileInputStream fileau=new  FileInputStream(path2);
		  AudioStream as=new AudioStream(fileau);
		  AudioPlayer.player.start(as);
		 }
		 catch (Exception e) {
			 e.printStackTrace();
		 }
}

public static void main(String[] args) {
	// TODO Auto-generated method stub
      new Calculator();
}

}

运行结果:

开始界面
得出结果

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值