界面设计:
一:框架
本计算器是基于Swing组建的图形用户界面,采用JFrame框架作为主窗口
public class Calculator extends JFrameimplements ActionListener
类名Calculator(计算器),继承JFrame框架,实现事件监听器接口
二:文本行,按钮
整个计算器界面,可以随意发挥,我编写的界面最终的样子在文章开头有图片
计算器类中,定义的成员有:
①private String[]KEYS={"7","8","9","*","4","5","6","-","1","2","3","+","0","e","π","÷","c","%",".","=","(",")","sqr","x*x"}; ②private JButton keys[]=new JButton[KEYS.length]; ③private JTextField resultText = new JTextField("0.0"); ④private String b="";
①:按钮标签字符串
②:定义按钮数组
③:定义文本行
④:用于存放计算式
构造方法代码段如下(计算器的整体界面完成)
public Calculator() { super("计算器"); this.setLayout(null);//未采用任何类型的布局,后面的文本框和按钮显示位置都是自己计算好的位置 resultText.setBounds(20, 5, 255, 40);//设置文本框大小 resultText.setHorizontalAlignment(JTextField.RIGHT);//文本框内容右对齐 resultText.setEditable(false);//文本框不允许修改结果 this.add(resultText);//新建文本框 int x=20,y=55; for (int i=0;i//放置按钮 { keys[i] = new JButton(); keys[i].setText(KEYS[i]); keys[i].setBounds(x, y, 60, 40); if(x<215) { x+=65; } else { x = 20; y+=45; } this.add(keys[i]); } for (int i = 0; i //每个按钮都注册事件监听器 { keys[i].addActionListener(this); } this.setResizable(false); this.setBounds(500, 200, 300, 400); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); }
事件处理(以下代码用同一个字符串来记录计算式和结果,保证了计算式可以连续计算):
public void actionPerformed(ActionEvente)//处理事件 { String label = e.getActionCommand(); //获得事件源的标签 if (label=="c"||label=="=")//按钮C清空文本框,消除前面所有的输入和结果 { if(label=="=")//按钮=得出最终结果,调用计算方法 { String s[]=yunsuan(this.b); String result=Result(s); this.b=result+""; resultText.setText(this.b);//更新文本框,当前结果在字符串b中,并未删除,下一次输入是接着这个结果的,这样可以实现连续运算 } else { this.b=""; resultText.setText("0");//更新文本域的显示,显示初始值 } } else if (label=="sqr")//sqr 按钮计算开方 { String n=yunsuan2(this.b); resultText.setText(n); this.b=n; } else if(label=="x*x")//x*x按钮实现某个数的平方 { String m=yunsuan3(this.b); resultText.setText(m); this.b=m; } else if(label=="e"||label=="π") { if (label=="e")//常数e { Stringm=String.valueOf(2.71828); this.b=this.b+m; resultText.setText(this.b); } if (label=="π")//常数π { Stringm=String.valueOf(3.14159265); this.b=this.b+m; resultText.setText(this.b); } } else { this.b=this.b+label; resultText.setText(this.b); } }
高品质全面课程升级,2020最新SVIP豪华版