java模仿windows计算器示例
这个计算器的界面模仿Windows自带的简易计算器,包括交互界面和和对各种输入的响应。目前尚未实现菜单栏和记忆类按钮的功能
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.GridLayout;
importjava.awt.Insets;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JFrame;
importjavax.swing.JButton;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
importjavax.swing.SwingConstants;
importjavax.swing.plaf.basic.BasicBorders;
publicclassCalculatorextendsJFrame{
privatestaticfinallongserialVersionUID=1L;
Containerc=getContentPane();
StringBuildernumber1=newStringBuilder("");//储存第1个数字字符串
StringBuildernumber2=newStringBuilder("");//储存第2个数字字符串
StringBuilderoperator=newStringBuilder("");//储存运算符
StringBuilderresult=newStringBuilder("");//储存运算结果
JTextFieldnumbershow=newJTextField("0.");//数字显示区域,初始显示为"0."
publicstaticvoidmain(String[]args){//主方法
Calculatorc1=newCalculator();
c1.setVisible(true);
}
publicCalculator(){//计算器构造方法
setTitle("计算器");
setBounds(100,100,260,245);
setResizable(false);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenuBar();//创建菜单栏
createNumberShow();//创建数字显示区域
createMemoShow();//创建记忆显示
createClearButtons();//创建Backspace,CE,C等三个按钮
createButtonArea();//创建数字按钮区域
}
privatevoidcreateMenuBar(){//创建菜单栏的方法
JMenuBarmenubar=newJMenuBar();
setJMenuBar(menubar);
JMenumenu1=newJMenu("编辑");
JMenumenu2=newJMenu("查看");
JMenumenu3=newJMenu("帮助");
menubar.add(menu1);
menubar.add(menu2);
menubar.add(menu3);
JMenuItemmenu1item1=newJMenuItem("复制");
JMenuItemmenu1item2=newJMenuItem("粘贴");
JMenuItemmenu2item1=newJMenuItem("标准型");
JMenuItemmenu2item2=newJMenuItem("科学型");
JMenuItemmenu2item3=newJMenuItem("科学分组");
JMenuItemmenu3item1=newJMenuItem("帮助主题");
JMenuItemmenu3item2=newJMenuItem("关于计算器");
menu1.add(menu1item1);
menu1.add(menu1item2);
menu2.add(menu2item1);
menu2.add(menu2item2);
menu2.add(menu2item3);
menu3.add(menu3item1);
menu3.add(menu3item2);
}
privatevoidcreateNumberShow(){//创建数字显示区域的方法
numbershow.setHorizontalAlignment(JTextField.RIGHT);
numbershow.setBounds(5,0,245,22);
numbershow.setEnabled(false);
numbershow.setDisabledTextColor(Color.BLACK);
c.add(numbershow);
}
privatevoidcreateMemoShow(){//创建记忆显示的方法
JTextFieldmemoshow=newJTextField();
memoshow.setEditable(false);
memoshow.setBounds(10,30,28,22);
memoshow.setBorder(newBasicBorders.FieldBorder(Color.black,
Color.black,Color.white,Color.white));
c.add(memoshow);
}
privatevoidcreateClearButtons(){//创建Backspace,CE,C等三个按钮的方法
JButton[]clearbutton=newJButton[3];
String[]clearbuttontext={"Backspace","CE","C"};
for(inti=0;i<3;i++){
clearbutton[i]=newJButton();
clearbutton[i].setText(clearbuttontext[i]);
clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
clearbutton[i].setMargin(newInsets(0,0,0,0));
clearbutton[i].setFont(newjava.awt.Font("Arial",0,9));
clearbutton[i].setForeground(Color.blue);
clearbutton[i].setBounds(48+i*68,30,63,22);
clearbutton[i].setForeground(Color.red);
c.add(clearbutton[i]);
}
clearbutton[0].addActionListener(newActionListener(){//为Backspace按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(number1.toString().equals("")){//如果未做任何输入
showNumber(numbershow,number1);//显示number1
}elseif(operator.toString().equals("")){//如果只输入了number1
number1.deleteCharAt(number1.toString().length()-1);//将number1的最后一个字符去掉
showNumber(numbershow,number1);//显示number1
}elseif(number2.toString().equals("")){//如果只输入了number1和operator
showNumber(numbershow,number1);//不作任何处理,显示number1
}else{//如果输入了number1、operator、number2
number2.deleteCharAt(number2.toString().length()-1);//将number2的最后一个字符去掉
showNumber(numbershow,number2);//显示number2
}
}
});
clearbutton[1].addActionListener(newActionListener(){//为CE按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(number1.toString().equals("")){//如果未做任何输入
showNumber(numbershow,number1);//显示number1
}elseif(operator.toString().equals("")){//如果只输入了number1
number1.setLength(0);//清除number1
showNumber(numbershow,number1);//显示number1
}elseif(number2.toString().equals("")){//如果输入了number1和operator
showNumber(numbershow,number2);//不作任何处理,显示number2
}else{//如果输入了number1、operator、number2
number2.setLength(0);//清除number2
showNumber(numbershow,number2);//显示number2
}
}
});
clearbutton[2].addActionListener(newActionListener(){//为C按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){//将所有储存清零
number1.setLength(0);
number2.setLength(0);
operator.setLength(0);
numbershow.setText("0.");
result.setLength(0);
}
});
}
privatevoidcreateButtonArea(){//创建数字按钮区域的方法
JPanelButtonArea=newJPanel();
ButtonArea.setBounds(5,55,245,125);
ButtonArea.setLayout(newGridLayout(4,6,5,5));
c.add(ButtonArea);
JButton[]numberbutton=newJButton[24];
String[]numberbuttontext={"MC","7","8","9","/","sqrt","MR",
"4","5","6","*","%","MS","1","2","3","-","1/X","M+",
"0","+/-",".","+","="};
for(inti=0;i<24;i++){//使用循环为这24个按钮添加标识
numberbutton[i]=newJButton(numberbuttontext[i]);
ButtonArea.add(numberbutton[i]);
if(i%6==0||i%6==4||i==23){//操作符按钮设置为红色
numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(newInsets(0,0,0,0));
numberbutton[i].setFont(newjava.awt.Font("Arial",0,9));
numberbutton[i].setForeground(Color.red);
}else{//其它设置为蓝色
numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(newInsets(0,0,0,0));
numberbutton[i].setFont(newjava.awt.Font("Arial",0,9));
numberbutton[i].setForeground(Color.blue);
}
}
int[]numbers={19,13,14,15,7,8,9,1,2,3};//该数组中的数字分别代表0-9等数字在numberbuttontext数组中序号
for(inti=0;i<=9;i++){//使用循环为这0-9这十个数字按钮添加监听器
finalStringstr=String.valueOf(i);
numberbutton[numbers[i]].addActionListener(newActionListener(){//为0-9按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(operator.toString().equals("")){//没有输入operator之前
add(number1,str);//只设置number1的值
showNumber(numbershow,number1);//只显示number1的值
}else{//输入operator之后
add(number2,str);//只设置number2的值
showNumber(numbershow,number2);//只显示number2的值
}
}
});
}
numberbutton[20].addActionListener(newActionListener(){//为"+/-"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(operator.toString().equals("")){//没有输入operator之前
add(number1,"+/-");//只设置number1的值
showNumber(numbershow,number1);//只显示number1的值
}else{//输入operator之后
add(number2,"+/-");//只设置number2的值
showNumber(numbershow,number2);//只显示number2的值
}
}
});
numberbutton[21].addActionListener(newActionListener(){//为"."按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(operator.toString().equals("")){//在输入operator之前,只显示number1的值
add(number1,".");
showNumber(numbershow,number1);
}else{//在输入operator之后,只显示number2的值
add(number2,".");
showNumber(numbershow,number2);
}
}
});
numberbutton[22].addActionListener(newActionListener(){//为"+"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
operator.setLength(0);
operator.append("+");
}
});
numberbutton[16].addActionListener(newActionListener(){//为"-"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
operator.setLength(0);
operator.append("-");
}
});
numberbutton[10].addActionListener(newActionListener(){//为"*"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
operator.setLength(0);
operator.append("*");
}
});
numberbutton[4].addActionListener(newActionListener(){//为"/"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
operator.setLength(0);
operator.append("/");
}
});
numberbutton[23].addActionListener(newActionListener(){//为"="按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(number1.toString().equals("")){//当number1为空时
showNumber(numbershow,number1);
}elseif(operator.toString().equals("")){//当number1不为空,而operator为空时
showNumber(numbershow,number1);
}elseif(number2.toString().equals("")){//当number1、operator均不为空,而number2为空时
switch(operator.toString()){
case("+"):{
number2.append(number1.toString());
doubled=Double.parseDouble(number1
.toString())
+Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
case("-"):{
number2.append(number1.toString());
doubled=Double.parseDouble(number1
.toString())
-Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
case("*"):{
number2.append(number1.toString());
doubled=Double.parseDouble(number1
.toString())
*Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
case("/"):{
number2.append(number1.toString());
doubled=Double.parseDouble(number1
.toString())
/Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
}
}else{//当number1、operator、number2均不为空时
switch(operator.toString()){
case("+"):{
doubled=Double.parseDouble(number1
.toString())
+Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
case("-"):{
doubled=Double.parseDouble(number1
.toString())
-Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
case("*"):{
doubled=Double.parseDouble(number1
.toString())
*Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
case("/"):{
doubled=Double.parseDouble(number1
.toString())
/Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow,result);
number1.setLength(0);
number1.append(d);
}
break;
}
}
}
});
numberbutton[17].addActionListener(newActionListener(){//为"1/x"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(number1.toString().equals("")){//没有输入number1时
numbershow.setText("除数不能为零");
}elseif(operator.toString().equals("")){//输入了number1,但没有输入operator
if(Double.parseDouble(number1.toString())==0){//如果number1的值为零
numbershow.setText("除数不能为零");
}else{//如果number1的值不为零
doubled=1/(Double.parseDouble(number1
.toString()));
number1.setLength(0);
number1.append(d);//将number1的值开放并存储
showNumber(numbershow,number1);
}
}elseif(number2.toString().equals("")){//输入了number1、operator,但没有输入number2
doubled=1/(Double.parseDouble(number1
.toString()));
number2.append(d);//将number1的值开放并存储
showNumber(numbershow,number2);
}else{//输入了number1、operator,number2
doubled=1/(Double.parseDouble(number2
.toString()));
number2.setLength(0);
number2.append(d);//将number2的值开放并存储
showNumber(numbershow,number2);
}
}
});
numberbutton[11].addActionListener(newActionListener(){//为"%"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
//暂时空缺
}
});
numberbutton[5].addActionListener(newActionListener(){//为"sqrt"按钮添加监听器
@Override
publicvoidactionPerformed(ActionEvente){
if(number1.toString().equals("")){//没有输入number1时
showNumber(numbershow,number1);
}elseif(operator.toString().equals("")){//输入了number1,但没有输入operator
if(Double.parseDouble(number1.toString())<0){//number1小于0
numbershow.setText("函数输入无效");
}else{//number1大于0
doubled=Math.sqrt(Double.parseDouble(number1
.toString()));
number1.setLength(0);
number1.append(d);//将number1的值开放并存储
showNumber(numbershow,number1);
}
}elseif(number2.toString().equals("")){//输入了number1、operator,但没有输入number2
doubled=Math.sqrt(Double.parseDouble(number1
.toString()));
number2.append(d);//将number1的值开放并存储
showNumber(numbershow,number2);
}else{//输入了number1、operator、number2
doubled=Math.sqrt(Double.parseDouble(number2
.toString()));
number2.setLength(0);
number2.append(d);//将number2的值开放并存储
showNumber(numbershow,number2);
}
}
});
}
publicvoidadd(StringBuilders1,Strings2){//定义按钮输入后数字字符串变化的方法
if(s2.equals("+/-")){//定义输入"+/-"后数字字符串的变化
if(s1.toString().equals("")||s1.toString().equals("0")){//如果数字字符串为空或者0,那么不发生变化
s1.append("");
}else{//如果数字字符串不为空也不为0,那么在数字字符串前增加或删除"-"字符
if(s1.toString().startsWith("-")){
s1.deleteCharAt(0);
}else{
s1.insert(0,"-");
}
}
}
if(s2.equals(".")){//定义输入"."后数字字符串的变化
if(s1.toString().indexOf(".")==-1){//查找数字字符串中是否含有"."字符,如果没有则执行以下代码
if(s1.toString().equals("")){//如果数字字符串为空,那么将数字字符串设置为"0."
s1.setLength(0);
s1.append("0.");
}else{
s1.append(".");
}
}else{//如果有,则不发生变化
s1.append("");
}
}
if(s2.equals("0")){//定义输入"0"后数字字符串的变化
if(s1.toString().equals("0")){//当数字的字符串为"0"时,不发生变化
s1.append("");
}else{//当数字的字符串吧为"0"时,在其字符串后增加"0"
s1.append("0");
}
}
for(inti=1;i<10;i++){//通过循环,定义输入1-9后数字字符串的变化
Stringstr=String.valueOf(i);
if(s2.equals(str)){//定义输入1-9后数字字符串的变化
if(s1.toString().equals("0")){
s1.setLength(0);
s1.append(str);
}else
s1.append(str);
}
}
}
publicvoidshowNumber(JTextFieldj,StringBuilders){//定义数字显示区域如何显示数字字符串的方法
if(s.toString().equals("")==true||s.toString().equals("0")==true){
j.setText("0.");
}elseif(s.toString().indexOf(".")==-1){
j.setText(s.toString()+".");
}else{
j.setText(s.toString());
}
}
}
相关文章
- java怎么调用.asmx_Java调用Webservice(asmx)的例子
- 手机java程序_2020年最流行的Java开发技术
- java 论坛_5 个最好用的 Java 开源论坛系统
- java uuid 随机数_Java随机数和UUID[通俗易懂]
- java setproperty 未生效_Java System类setProperty()方法及示例[通俗易懂]
- java使用xquery_如何使用Java XQuery
- 阿里架构师耗时1年,把P8所需要的整个Java体系,都整理到了一起
- 【错误记录】Android Studio 4.2.1 编译报错 ( 设置支持的 Java 和 Kotlin 版本 | java.lang.BootstrapMethodError )
- Java 静态导入详解编程语言
- Linux平台上Java新版本发布(linux发布java)
- 新手进阶:从Java开发到Linux系统架构(java转linux)
- Oracle与Java的连接:揭秘数据库开发技术之间的神奇联系(oracle连接java)
- 版本配置Linux系统的默认Java版本(linux默认java)
- Linux与Java:驱动着计算未来(linux与java)
- Java NIO:NIO概述详解编程语言
- Java操作Redis实现数据快速存取(java访问redis)
- Linux轻松访问Windows共享文件夹,搞定文件共享(linux访问windows共享文件夹)
- 查找Java进程:Linux解决方案(linux查找java进程)
- Linux与Windows的差异:显而易见的对比(linux与windows的区别)
- Java与MySQL事务处理(mysql中java事物)
- 秘籍学习实现纯Java版Redis(纯java版redis)