1、Java实验四GUI简易计算器实验四 GUI图形界面设计一 实验要求 1、掌握Awt与Swing的区别与联系;掌握Swing常用图像组件的使用;掌握主要的布局管理器的使用方法;2、了解事件处理机制;掌握Swing常用图像组件的使用;掌握固定菜单和弹出式菜单的创建和使用;二 实验内容1、设计并实现一个类似于windows操作系统附件中自带的计算器的一款简单的计算器,要求界面美观,设计合理;带有常用的菜单并实现其功能;能完成加、减、乘、除等简单的计算,在下面写出其核心代码。(1)源代码package com.cal;import java。awt。*;import javax。swing。*;im
2、port java。awt。event。;import java。util。Stack;import java.awt。GridLayout;class Cal extends JFrame implements ActionListener JTextField show=null; JPanel jp1,jp2; JButton c,jia,jian,cheng,chu,equ,point; /按钮 清空 加,减,乘 ,除,等号,小数点 JButton b = new JButton10;/按钮数组 0-9 /栈控制标记位 int flag=1; /结果标记位 int reflag=0;
3、public Cal() /创建组件 jp1=new JPanel(); jp2=new JPanel(); show=new JTextField(45); show.setFont(new Font(”宋体,Font。PLAIN,16); jia=new JButton(” + ); jian=new JButton(” ”); cheng=new JButton(” * ”); chu=new JButton(” / ); equ=new JButton(” = ”); equ。setForeground(Color.RED); equ.setBackground(Color.GREEN
4、); point=new JButton( 。 ”); b0=new JButton(”0); b1=new JButton(1”); b2=new JButton(”2); b3=new JButton(”3”); b4=new JButton(4”); b5=new JButton(5”); b6=new JButton(”6”); b7=new JButton(”7”); b8=new JButton(8); b9=new JButton(”9”); c=new JButton(” C ”); c。setForeground(Color.RED); c。setBackground(Col
5、or.YELLOW); c。setFont(new Font(黑体,Font.PLAIN,15); /添加组件 jp1。add(show); jp1。add(c); / show.setEditable(false); jp2。add(b7); jp2.add(b8); jp2。add(b9); jp2.add(jia); jp2。add(b4); jp2.add(b5); jp2.add(b6); jp2.add(jian); jp2。add(b1); jp2。add(b2); jp2.add(b3); jp2.add(cheng); jp2.add(equ); jp2.add(b0); j
6、p2。add(point); jp2。add(chu); jp2.setLayout(new GridLayout(4,4,3,3); /注册监听 show.addActionListener(this); jia.addActionListener(this); jian。addActionListener(this); cheng.addActionListener(this); chu.addActionListener(this); equ。addActionListener(this); point.addActionListener(this); c。addActionListen
7、er(this); for(int i=0;i SNum=new Stack(); StackObject SOp=new Stack(); SNum。removeAllElements(); SOp。removeAllElements(); String Snum=”; double Inum=0; char a1 = st.charAt(st.length()1)); char b1 = st。charAt(st.length()-2)); for(int i =0;ist.length();i+) char c = st。charAt(i); if(c=+|c=) Inum=Double
8、。parseDouble(Snum); if(SOp。empty()) SNum。push(Inum); else switch(char)SOp。peek()) case +: SNum。push((double)SNum.pop()+Inum); SOp。pop(); break; case -: SNum。push((double)SNum。pop()Inum); SOp。pop(); break; case : SNum。push((double)SNum。pop()Inum); SOp.pop(); break; case /: SNum.push(double)SNum.pop()
9、/Inum); SOp.pop(); break; /将符号压入栈 switch(c) case +: SOp。push(+); break; case -: SOp。push(-); break; Snum=”; else if(c=*c=/) Inum=Double。parseDouble(Snum); if(SOp.empty() SNum。push(Inum); else if(a1=0 & b1=.) /如果是整数,则去掉后面的小数点和0 show。setText(String。valueOf(Math.round(Inum)); switch(char)SOp。peek() cas
10、e *: SNum。push((double)SNum.pop()*Inum); SOp.pop(); break; case /: SNum.push((double)SNum。pop()Inum); SOp。pop(); break; default: SNum.push(Inum); break; /将符号压入符号栈 switch (c) case : SOp。push(); break; case /: SOp。push(/); break; Snum=”; else Snum=Snum+c; SNum.push(Double。parseDouble(Snum); /将表达式最后一个数
11、入栈 double a,b; while(!SOp.empty()) a=(double)SNum。pop(); b=(double)SNum.pop(); switch((char)SOp。pop() case +: SNum。push(b+a); break; case -: SNum。push(ba); break; case *: SNum.push(b*a); break; case /: SNum.push(b/a); break; return (double)SNum.pop(); public class Calculter public static void main(S
12、tring args) / TODO 自动生成的方法存根 Cal cal=new Cal();(2)截图加乘清除小数三 实验内容中遇到的问题、解决方法和体会。遇到的问题:1.String 如何转为 double类型2.栈的使用 3.符号放到最后出错4.连续输入小数点出错5.如何实现小数的运算6. Exception in thread ”AWTEventQueue-0” java.lang.StringIndexOutOfBoundsException: String index out of range: 1java。lang。NumberFormatException解决方法:1。 Inu
13、m=Double。parseDouble(Snum);2。查询Java开发文档解决.3.输出错误信息4。输出错误信息5。 char a1 = st。charAt(st。length()1)); char b1 = st。charAt(st.length()-2));if(a1=0 & b1=。) show。setText(String.valueOf(Math.round(Inum))); 6.不直接按等于号体会这个实验是一个很综合的实验,需要用到GUI,事件监听,和栈 涉及到很多的知识,自己也有很多不会的内容,做这个实验很考验自己的耐性,和信心,以及查阅信息的能力。但最总的结果是好的,做出来很开心。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2