java 计算器例子


课程设计一:一个用 Java 设计的计算器 知识点: 1、 学会使用 Awt 包; 2、 懂得 Java 的数据类型; 3、 窗体的布局; 4、 窗体的字体设置; 设计步骤: 1、 创建一个新的应用程序 AwtCalc.java , 首先创建一个空的窗口。 2、 定义用于显示结果的文本显示类,用来继承 Canvas 构件。 3、 在窗口上添加需要的构件,用来完成窗口的布局。 4、 添加事件处理的部分。 实验效果为: 程序功能: 一个简单的计算器程序。用户可以利用鼠标点击数值或操作符按键完成计算的输入,计算的 结果将被显示在窗口上部的文本框中。 实现程序的部分代码为: import java.awt.*; import java.awt.event.*; import java.awt.Graphics; public class AwtCalc extends Frame implements ActionListener { private Button[] buttons = new Button[19]; private String[] buttonText = { " 1 " , " 2 ", " 3 ", " + ", " - ", " 4 ", " 5 ", " 6 ", " x ", " / ", " 7 ", " 8 ", " 9 ", "^ ", "sqrt", " C ", " 0 ", " . ", " = " }; private ETextField result; // 结果显示框 private String input = ""; // 用户的输入 private Label label; private Color forecolor, // 前景色 backcolor, // 背景色 fieldcolor; // 显示框颜色 private Font font, buttonfont; private int oper = 0, // 记录运算过程中的运算符 oldoper = 0, newoper = 0; private double answer, num1 = 0.0, num2 = 0.0, num3 = 0.0; private final int ADD=1, // 用于记录运算符的常量 SUB = 2, MULT = 3, DIVI = 4, POW = 5, SQRT = 6; private boolean firstpress = true, //是否按下第一个按键 morenums = false, //是否多个数值被输入 equals = false, //等于是否已经被按下 clearscreen = false, //是否清屏 decnumber = false, //是否输入一个浮点数 doubleclick = false; //是否双击 public AwtCalc(){ super("计算器"); //初始化颜色 buttonfont = new Font( "Courier", Font.PLAIN, 12 ); setBackground( Color.lightGray ); result = new ETextField( 125, 18 ); font = new Font( "宋体", Font.ITALIC, 15 ); label = new Label( "结果" ); label.setFont( font ); result.setBackground( Color.white ); setLayout( new FlowLayout() ); //初始化按钮 Panel mainPanel=new Panel(); mainPanel.setLayout(new GridLayout(5,1)); for ( int i = 0; i < 19; i++ ) { buttons[i] = new Button( buttonText[i] ); buttons[i].setFont( buttonfont ); buttons[i].addActionListener( this ); } Panel panel1=new Panel(); panel1.add( result ); panel1.add( label ); mainPanel.add(panel1); Panel panel2=new Panel(); panel2.add(buttons[0]); panel2.add(buttons[1]); panel2.add(buttons[2]); panel2.add(new Label( " " )); panel2.add(buttons[3]); panel2.add(buttons[4]); mainPanel.add(panel2); Panel panel3=new Panel(); panel3.add(buttons[5]); panel3.add(buttons[6]); panel3.add(buttons[7]); panel3.add(new Label( " " )); panel3.add(buttons[8]); panel3.add(buttons[9]); mainPanel.add(panel3); Panel panel4=new Panel(); panel4.add(buttons[10]); panel4.add(buttons[11]); panel4.add(buttons[12]); panel4.add(new Label( " " )); panel4.add(buttons[13]); panel4.add(buttons[14]); mainPanel.add(panel4); Panel panel5=new Panel(); panel5.add(buttons[15]); panel5.add(buttons[16]); panel5.add(buttons[17]); panel5.add(new Label( " " )); panel5.add(buttons[18]); mainPanel.add(panel5); add("Center",mainPanel); buttons[15].setForeground( Color.red ); resize(235,210); show(); } //===================================================================== ========= // 处理按钮被按下时的动作,进行相应的处理 //===================================================================== ========= public void actionPerformed( ActionEvent e ) { // 判断是否按下一个运算符键 if ( e.getSource() != buttons[3] && e.getSource() != buttons[4] && e.getSource() != buttons[8] && e.getSource() != buttons[9] && e.getSource() != buttons[13] && e.getSource() != buttons[14] && e.getSource() != buttons[15] && e.getSource() != buttons[18] ) { //按下一个数字键 if ( clearscreen ) { // 在完成一次运算后再次按下运算符之前清屏 clearScreen(); clearscreen = false; } if ( e.getSource() == buttons[0] ) { input += "1"; // 输入为"1" result.setText( input ); showAnswer( input ); } // end else if else if ( e.getSource() == buttons[1] ) { input += "2"; // 输入为"2" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[2] ) { input += "3"; // 输入为"3" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[5] ) { input += "4"; // 输入为"4" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[6] ) { input += "5"; // 输入为"5" showAnswer( input ); } // end if else if ( e.getSource() == buttons[7] ) { input += "6"; // 输入为"6" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[10] ) { input += "7"; // 输入为"7" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[11] ) { input += "8"; // 输入为"8" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[12] ) { input += "9"; // 输入为"9" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[16] ) { input += "0"; // 输入为"0" showAnswer( input ); } // end else if else if ( e.getSource() == buttons[17] ) { if ( decnumber == false ) { //设置输入为浮点数 decnumber = true; input += ".0"; // 输入为小数点 showAnswer( input ); } } } // end if // 检查是否按下加法按钮 if ( e.getSource() == buttons[3] ) { clearscreen = false; decnumber = false; oper = ADD; // 将运算符设置为加 clickCheck( input ); // 检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); // 如果没有双击,继续处理 input = ""; // 记录输入值的变量清空 } // end if // 检查是否按下减法按钮 else if (e.getSource() == buttons[4] ) { clearscreen = false; decnumber = false; oper = SUB; // 将运算符设置为减 clickCheck( input ); // 检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); // 如果没有双击,继续处理 input = ""; // 记录输入值的变量清空 } // end else if // 检查是否按下乘法按钮 else if (e.getSource() == buttons[8] ) { clearscreen = false; decnumber = false; oper = MULT; // 将运算符设置为乘法 clickCheck( input ); // 检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); // 如果没有双击,继续处理 input = ""; // 记录输入值的变量清空 } //end else if // 检查是否按下除法按钮 else if (e.getSource() == buttons[9] ) { clearscreen = false; decnumber = false; oper = DIVI; // 将运算符设置为除法 clickCheck( input ); // 检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); // 如果没有双击,继续处理 input = ""; // 记录输入值的变量清空 } // end else if // 检查是否按下幂运算按钮 else if ( e.getSource() == buttons[13] ) { clearscreen = false; decnumber = false; oper = POW; // 将运算符设置为幂 clickCheck( input ); // 检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); // 如果没有双击,继续处理 input = ""; // 记录输入值的变量清空 } // end else if // 检查是否按下开方运算按钮 else if ( e.getSource() == buttons[14] ) { clearscreen = false; oper = SQRT; // 将运算符设置为开方 clickCheck( input ); // 检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); // 如果没有双击,继续处理 input = ""; // 记录输入值的变量清空 } // end else if // 检查是否按下清零按钮 if (e.getSource() == buttons[15] ) { clearScreen(); } // end if // 检查是否按下等于按钮 if (e.getSource() == buttons[18] ) { equals = true; clearscreen = true; clickCheck( input ); //检查是否为双击运算符 if ( doubleclick == false ) processNumbers(); //如果没有双击,继续处理 input = Double.toString( answer ); } // end if } // end actionPerformed() //===================================================================== ========= //该方法处理用户的这种输入 //===================================================================== ========= public void processNumbers() { // 判断运算符是否被第一次按下 if ( firstpress ) { if ( equals ) { num1 = answer; //结果被保存 equals = false; //等待另外的输入 } // end if else num1 = Double.valueOf( input ).doubleValue(); oldoper = oper; // 将当前运算符保存 // 如果进行开方运算 if ( oper == SQRT ) { answer = calculate( oldoper, num1, 0.0 ); showAnswer( Double.toString( answer ) ); morenums = true; } firstpress = false; } // end if else if ( !morenums ) { num2 = Double.valueOf( input ).doubleValue(); answer = calculate( oldoper, num1, num2 ); showAnswer( Double.toString( answer) ); newoper = oper; if ( !equals ) morenums = true; //标识已经有至少两个数值被输入 else { morenums = false; //如果等号被按下, firstpress 将被置为 true firstpress = true; } // end else } // end if else if (morenums) { //输入多个数值 if ( equals ) { newoper = oper; morenums = false; firstpress = true; } // end if num3 = Double.valueOf( input ).doubleValue(); answer = calculate( newoper, answer, num3 ); showAnswer( Double.toString(answer) ); newoper = oper; } // end else if } // end processNumbers() //===================================================================== ========= //该方法用于根据输入的数值或运算符进行计算 //===================================================================== ========= public double calculate( int oper, double number1, double number2 ) { double answer = 0.0; switch( oper ) { case ADD: answer = number1 + number2; break; case SUB: answer = number1 - number2; break; case MULT: answer = number1 * number2; break; case DIVI: answer = number1 / number2; break; case POW: answer = Math.pow( number1, number2 ); break; case SQRT: answer = Math.sqrt( number1 ); break; } // end switch return answer; } // end calculate() //===================================================================== ========= //该方法用于将计算的结果输出到结果框中 //===================================================================== ========= public void showAnswer( String s ) { double answer; answer = Double.valueOf(s).doubleValue(); if ( decnumber ) result.setText( Double.toString(answer) ); else result.setText( s ); } // end showAnswer //===================================================================== ========= //该方法检查是否双击运算符 //===================================================================== ========= public boolean clickCheck( String s ) { if ( s == "" ) doubleclick = true; else doubleclick = false; return doubleclick; } //===================================================================== ========= //清屏 //===================================================================== ========= public void clearScreen() { oper = 0; // 初始化各个变量 input = ""; answer = 0; decnumber = false; morenums = false; firstpress = true; equals = false; showAnswer( Integer.toString( (int)answer) ); } public void paint( Graphics g ) { //绘制边界 g.drawRect( 0, 0, size().width - 1, size().height - 1 ); g.drawLine( 0, 0, 0, size().height ); } public static void main(String[] args){ AwtCalc ca=new AwtCalc(); } } // end program
还剩10页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

learner

贡献于2014-06-29

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf