java普通计算器共10页文档.docx
- 文档编号:26765725
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:16
- 大小:22.25KB
java普通计算器共10页文档.docx
《java普通计算器共10页文档.docx》由会员分享,可在线阅读,更多相关《java普通计算器共10页文档.docx(16页珍藏版)》请在冰豆网上搜索。
java普通计算器共10页文档
基本思想:
建立窗口时,我后面才想到把所有的组件先放到Container容器中。
我先把计算器分解成,菜单栏,输入区,按钮区,分别对三个函数实现相应的操作,最后在计算器构造函数调用绑定到窗口。
我创建了计算符操作按钮、非计算操作按钮、菜单监听器,三个监听器来实现菜单和按钮监听。
对于各组件我采用GridBagLayout可变布局,再GridBagConstraints对布局组件布局设置。
JTextField输入区全局定义为了方便按钮的输入。
创建一个按钮函数,有利于添加的按钮布局设置以及根据不同类型的按钮添加不同的监听器。
因为计算器有整数和小数计算的区别,我创建一个数值类根据不同的值,计算后返回不同的类型,在类内部实现数值的计算操作。
最后单独一个函数来实现计算操作。
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
importjava.awt.Container;
唐宋或更早之前,针对“经学”“律学”“算学”和“书学”各科目,其相应传授者称为“博士”,这与当今“博士”含义已经相去甚远。
而对那些特别讲授“武事”或讲解“经籍”者,又称“讲师”。
“教授”和“助教”均原为学官称谓。
前者始于宋,乃“宗学”“律学”“医学”“武学”等科目的讲授者;而后者则于西晋武帝时代即已设立了,主要协助国子、博士培养生徒。
“助教”在古代不仅要作入流的学问,其教书育人的职责也十分明晰。
唐代国子学、太学等所设之“助教”一席,也是当朝打眼的学官。
至明清两代,只设国子监(国子学)一科的“助教”,其身价不谓显赫,也称得上朝廷要员。
至此,无论是“博士”“讲师”,还是“教授”“助教”,其今日教师应具有的基本概念都具有了。
importjava.awt.Font;
课本、报刊杂志中的成语、名言警句等俯首皆是,但学生写作文运用到文章中的甚少,即使运用也很难做到恰如其分。
为什么?
还是没有彻底“记死”的缘故。
要解决这个问题,方法很简单,每天花3-5分钟左右的时间记一条成语、一则名言警句即可。
可以写在后黑板的“积累专栏”上每日一换,可以在每天课前的3分钟让学生轮流讲解,也可让学生个人搜集,每天往笔记本上抄写,教师定期检查等等。
这样,一年就可记300多条成语、300多则名言警句,日积月累,终究会成为一笔不小的财富。
这些成语典故“贮藏”在学生脑中,自然会出口成章,写作时便会随心所欲地“提取”出来,使文章增色添辉。
importjava.awt.GridBagConstraints;
importjava.awt.GridBagLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JTextField;
publicclassCaculatextendsJFrame{
privateGridBagLayoutlayout=newGridBagLayout();//可变布局
privateGridBagConstraintsconstraints=newGridBagConstraints();//布局设置
privateContainercontainer=newContainer();//容器,用于储存组件,最后一起添加到窗口
JTextFieldtextField=newJTextField();//输入区
intfpoint=0;//textField光标定位
Stringlast="0";//存储最后输入的数字
Stringcopty="";//编辑时使用
Numerresult=newNumer();//结果暂存
Numernum=newNumer();//输入暂存
privateStringlastCommand="=";//保存+,-,*,/,=命令
NumerM;//结果存储器
booleanupfirst=true;//判断是否首次使用向上
privatebooleanstart=false;//判断是否为数字的开始
privatebooleansetoperator=false;//判断是否使用计算符
privatebooleanden=false;//判断是否刚刚使用等号
publicCaculat(){
super("计算器");
container.setLayout(layout);
addMenu();
addTextField();
addButton();
add(container);
//添加菜单
privatevoidaddMenu(){
JMenumenus[]=newJMenu[3];//主菜单
menus[0]=newJMenu("查看(V)");
menus[0].setMnemonic('F');
menus[1]=newJMenu("编辑(E)");
menus[1].setMnemonic('E');
menus[2]=newJMenu("帮助(H)");
menus[2].setMnemonic('H');
JMenuItemlookItem[]=newJMenuItem[2];//子菜单
JMenuItemaditItem[]=newJMenuItem[3];
JMenuItemhelpItem[]=newJMenuItem[2];
lookItem[0]=newJMenuItem("普通型(O)");
lookItem[0].setMnemonic('O');//快捷键
lookItem[1]=newJMenuItem("标准型(T)");
lookItem[1].setMnemonic('T');
aditItem[0]=newJMenuItem("复制(C)Ctrl+C");//这个不会,只知道Alt+C
aditItem[0].setMnemonic('C');
aditItem[1]=newJMenuItem("粘贴(P)Ctrl+V");
aditItem[1].setMnemonic('P');
aditItem[2]=newJMenuItem("自由编辑(F)");
aditItem[2].setMnemonic('F');
helpItem[0]=newJMenuItem("关于主题(H)");
helpItem[0].setMnemonic('H');
helpItem[1]=newJMenuItem("关于计算器(A)");
MenuActionmenuaction=newMenuAction();//菜单监听器
lookItem[0].addActionListener(menuaction);
lookItem[1].addActionListener(menuaction);
aditItem[0].addActionListener(menuaction);
aditItem[1].addActionListener(menuaction);
aditItem[2].addActionListener(menuaction);
helpItem[0].addActionListener(menuaction);
helpItem[1].addActionListener(menuaction);
JMenuBarbar=newJMenuBar();//菜单容器吧
menus[0].add(lookItem[0]);menus[0].add(lookItem[1]);
menus[1].add(aditItem[0]);menus[1].add(aditItem[1]);
menus[1].add(aditItem[2]);
menus[2].add(helpItem[0]);menus[2].add(helpItem[1]);
setJMenuBar(bar);//把菜单绑到窗口上的方法
bar.add(menus[0]);
bar.add(menus[1]);
bar.add(menus[2]);
//添加输入区
privatevoidaddTextField(){
constraints.gridx=0;//组件x位置
constraints.gridy=1;//组件y位置
constraints.gridheight=1;//组件高度
constraints.gridwidth=5;//组件宽度
constraints.fill=GridBagConstraints.BOTH;//组件随显示变化的选项
constraints.weightx=1;//水平扩展,即显示变化时,长度变化
constraints.weighty=1;//垂直扩展,即高度变化
textField.setHorizontalAlignment(JTextField.RIGHT);//光标右边显示
textField.setEditable(false);//不可编辑
textField.setFont(newFont("Serif",Font.PLAIN,18));//显示字体
layout.setConstraints(textField,constraints);//把布局设置应用到组件上
container.add(textField);//把该组件添加到容器中
//添加按钮区
privatevoidaddButton(){
InsertActioninsert=newInsertAction();
CommandActioncommand=newCommandAction();
addbutton("MC",0,2,1,1,command);addbutton("MR",1,2,1,1,command);
addbutton("MS",2,2,1,1,command);addbutton("M+",3,2,1,1,command);
addbutton("M-",4,2,1,1,command);addbutton("Delete",0,3,1,1,insert);
addbutton("CE",1,3,1,1,insert);addbutton("C",2,3,1,1,insert);
addbutton("±",3,3,1,1,insert);addbutton("√",4,3,1,1,command);
addbutton("7",0,4,1,1,insert);addbutton("8",1,4,1,1,insert);
addbutton("9",2,4,1,1,insert);addbutton("÷",3,4,1,1,command);
addbutton("%",4,4,1,1,command);addbutton("4",0,5,1,1,insert);
addbutton("5",1,5,1,1,insert);addbutton("6",2,5,1,1,insert);
addbutton("×",3,5,1,1,command);addbutton("1/x",4,5,1,1,command);
addbutton("1",0,6,1,1,insert);addbutton("2",1,6,1,1,insert);
addbutton("3",2,6,1,1,insert);addbutton("-",3,6,1,1,command);
addbutton("+",4,6,1,1,command);addbutton("0",0,7,1,1,insert);
addbutton(".",1,7,1,1,insert);addbutton("=",4,7,1,1,command);
addbutton("←",2,7,1,1,command);addbutton("→",3,7,1,1,command);
//单个按钮设置
privatevoidaddbutton(Stringlabel,intx,inty,intheight,intwidth,ActionListenerlistener){
JButtonbutton=newJButton(label);
constraints.gridx=x;
constraints.gridy=y;
constraints.gridheight=height;
constraints.gridwidth=width;
constraints.fill=GridBagConstraints.BOTH;
button.addActionListener(listener);
layout.setConstraints(button,constraints);
container.add(button);//container.
//非计算符监听器。
主要是非计算操作的按钮
privateclassInsertActionimplementsActionListener{
publicvoidactionPerformed(ActionEventevent){
Stringinput=event.getActionCommand();//获取输入的按钮
Stringoutput=textField.getText();//获取输入区内容
//不再使用等号。
主要是刷新输入
if(den){
lastCommand="=";
den=false;}
//输入区的删除
if(input.equals("Delete")){
if(fpoint>0){
textField.setText(output.substring(0,fpoint-1)+
output.substring(fpoint,output.length()));
if(fpoint>0)fpoint--;}//光标位置减一
return;}
//删除前一次计算的结果
if(fpoint==output.length()&&setoperator==true){
textField.setText("");
output=textField.getText();
fpoint=output.length();
setoperator=false;}
if(input.equals(".")){//防止重复输入"."
if(output.indexOf(".")==-1){//在输入区中间插入
if(fpoint
textField.setText(output.substring(0,fpoint)+input+
output.substring(fpoint,output.length()));
fpoint++;output=textField.getText();}
elseif(fpoint==output.length()){//输入区尾部插入
if(output.length()==0){textField.setText("0.");}//空输入时加"0."
elsetextField.setText(output+".");
output=textField.getText();fpoint=output.length();}
start=true;return;}
//键入数字
if(!
input.equals("±")&&!
input.equals("CE")&&!
input.equals("C")){
//初始添加数字
if(output.equals("0")){textField.setText(input);
fpoint=input.length();start=true;return;}
//在中间插入数字
if(fpoint if(input.equals("0")&&fpoint==0){start=true;return;}//在开头添加0时跳过 elsetextField.setText(output.substring(0,fpoint)+input+ output.substring(fpoint,output.length()));} elseif(fpoint==output.length())textField.setText(output+input);//尾部添加 fpoint++;output=textField.getText(); start=true;return;} //保证每次按其他键时消去光标 if(output.indexOf("┃")! =-1){ intposition=output.indexOf("┃"); fpoint=position; textField.setText(output.substring(0,position)+output.substring(position+1,output.length())); output=textField.getText(); if(input.equals("±")){ if(output.equals("0"))textField.setText("-");//输入为0时被取代 elseif(output.startsWith("-")){ textField.setText(output.substring (1));} elsetextField.setText("-"+output); fpoint=textField.getText().length();start=true;} //重新输入 elseif(input.equals("CE")){textField.setText("");fpoint=0;} //重新开始计算 elseif(input.equals("C")){ textField.setText("");fpoint=0; result.d=0;result.n=0;lastCommand="="; fpoint=textField.getText().length(); //其他监听器。 主要是计算符操作的按钮 privateclassCommandActionimplementsActionListener{ publicvoidactionPerformed(ActionEventevent){ Stringinput=event.getActionCommand(); Stringoutput=textField.getText(); if(output.indexOf("┃")! =-1){ intposition=output.indexOf("┃"); fpoint=position; textField.setText(output.substring(0,position)+output.substring(position+1,output.length())); output=textField.getText(); if(input.equals("MC")){M=null;//清除M return;} if(input.equals("MR")){//显示M if(M==null){ JOptionPane.showMessageDialog( Caculat.this,String.format("%s","没有M记录! ")); }elsetextField.setText(""+M.putnum()); return;} if(input.equals("MS")){M=newNumer(result);//存入M return;} if(input.equals("M+")){M.add(result);//将当前窗口数据与“寄数器”内的数据相加后再存入“寄数器 return;} if(input.equals("M-")){M.sub(result); return;} //向左键 if(input.equals("←")){ if(! output.equals("")){ if(fpoint>0)fpoint--; textField.setText(output.substring(0,fpoint)+"┃"+ output.substring(fpoint,output.length())); return;} if(input.equals("→")){ if(! output.equals("")){ if(fpoint if(fpoint
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 普通 计算器 10 文档