java计算器实验报告Word格式.docx
- 文档编号:18234821
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:18
- 大小:22.05KB
java计算器实验报告Word格式.docx
《java计算器实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《java计算器实验报告Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
b)所用的各部分图形组件的定义:
FramemainFrame;
//主框架
JTextFieldanswerText;
//显示计算结果
JTextFieldmemoryState;
//显示计算器内存的使用情况
MenuBarmenuGroup;
//菜单栏
MenueditMenu,viewMenu,helpMenu;
//编辑,查看,帮助菜单
MenuItemcopyItem,pasteItem;
//复制,粘贴
MenuItemstandardModel;
//标准型
CheckboxMenuItemnumGroup;
//数字分组
MenuItemaboutCal;
//关于计算器
ButtonbuttonBackSpace,buttonCE,buttonC;
//退格,清除,清空按钮
ButtonbuttonMC,buttonMR,buttonMS,buttonMADD;
//内存操作按钮
ButtonbuttonNum[];
//数字按钮
ButtonbuttonAdd,buttonSub,buttonMul,buttonDiv;
//+,-,*,/
ButtonbuttonDot,buttonSign,buttonEqual;
//.+/-=
ButtonbuttonSqrt,buttonMod,buttonReciprocal;
//sqrt%1/x
c)组件的初始化以及对界面的排版
对主框架的初始化操作
voidinitMainFrame()函数是对主框架进行初始化,设置其框架大小270*250,
初始位置270*250,背景颜色Color.lightGray,是否显示true,能否改变窗口大小false,以及增加了addWindowListener委托事件,当关闭窗口时调用System.exit(0)系统指令,结束程序。
voidinitMainFrame()
{
mainFrame=newFrame("
计算器"
);
mainFrame.setSize(270,250);
mainFrame.setLocation(200,140);
mainFrame.setBackground(Color.lightGray);
mainFrame.setResizable(false);
mainFrame.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
}
对文本框的初始化操作
initTextField()是对文本textBufferanswerTextmemoryState的初始化,
textBuffer是用于对文本的缓冲处理,StringBuffer类优于String类是因为StringBuffer是对字符串直接操作,从而节省了内存。
由于在这个计算器程序中,对字符串的操作量很大,因此,StringBuffer在这方面体现出了其本身的优势。
answerText和memoryState用swing的组件JTextField是因为JTextField显示文本框时可以在文本框的右边显示,符合Windows自带计算器的特点。
answerText和memoryState的背景色为白色,都不能进行编辑。
answerText为右对齐,大小为23个字符,而memoryState为2个字符。
voidinitTextField()
textBuffer=newStringBuffer("
"
answerText=newJTextField(textBuffer.toString(),23);
answerText.setHorizontalAlignment(JTextField.RIGHT);
answerText.setEditable(false);
answerText.setBackground(Color.white);
memoryState=newJTextField
(2);
memoryState.setEditable(false);
memoryState.setBackground(Color.white);
对各按钮的初始化操作
initButtons()函数是对各按钮进行初始化,为每一个按钮增加其标签并增加了addActionListener(this)功能,用于给各按钮增加属性,具体的功能代码,请见actionPerformed(ActionEvente);
其中,数字按钮、四则运算按钮、小数点按钮都增加了键盘输入功能addKeyListener其参数为匿名类KeyListener的适配器newKeyAdapter(),当在键盘上按下相应的键时,为其增加相应的属性功能。
voidinitButtons()
buttonBackSpace=newButton("
BackSpace"
buttonBackSpace.addActionListener(this);
buttonCE=newButton("
CE"
buttonCE.addActionListener(this);
buttonC=newButton("
C"
buttonC.addActionListener(this);
buttonMC=newButton("
MC"
buttonMC.addActionListener(this);
buttonMR=newButton("
MR"
buttonMR.addActionListener(this);
buttonMS=newButton("
MS"
buttonMS.addActionListener(this);
buttonMADD=newButton("
M+"
buttonMADD.addActionListener(this);
buttonNum=newButton[10];
for(inti=0;
i<
buttonNum.length;
i++)
{
buttonNum[i]=newButton(Integer.toString(i));
buttonNum[i].addActionListener(this);
buttonNum[i].addKeyListener(newKeyAdapter(){
publicvoidkeyPressed(KeyEvente){
if(Character.isDigit(e.getKeyChar()))
{
textBuffer.append(e.getKeyChar());
answerText.setText(textBuffer.toString());
AddNum();
}
}
});
}
buttonAdd=newButton("
+"
buttonAdd.addActionListener(this);
buttonAdd.addKeyListener(newKeyAdapter(){
publicvoidkeyPressed(KeyEvente){
if(e.getKeyChar()=='
+'
)
AddFunction
(1);
buttonSub=newButton("
-"
buttonSub.addActionListener(this);
buttonSub.addKeyListener(newKeyAdapter(){
-'
AddFunction
(2);
buttonMul=newButton("
*"
buttonMul.addActionListener(this);
buttonMul.addKeyListener(newKeyAdapter(){
*'
AddFunction(3);
buttonDiv=newButton("
/"
buttonDiv.addActionListener(this);
buttonDiv.addKeyListener(newKeyAdapter(){
/'
AddFunction(4);
buttonDot=newButton("
."
buttonDot.addActionListener(this);
buttonDot.addKeyListener(newKeyAdapter(){
.'
{
textBuffer.append(e.getKeyChar());
answerText.setText(textBuffer.toString());
AddNum();
buttonSign=newButton("
+/-"
buttonSign.addActionListener(this);
buttonEqual=newButton("
="
buttonEqual.addActionListener(this);
buttonEqual.addKeyListener(newKeyAdapter(){
='
OnGo();
buttonSqrt=newButton("
sqrt"
buttonSqrt.addActionListener(this);
buttonMod=newButton("
%"
buttonMod.addActionListener(this);
buttonReciprocal=newButton("
1/x"
buttonReciprocal.addActionListener(this);
对菜单的初始化操作
initMenu()函数是对各菜单的初始化,先为其生成实例对象,再添加到MenuBar的实例对象menuGroup中,MenuItem各项添加到相应的Menu中。
voidinitMenu()
/*
*先为各个菜单项生成实例对象,并为其设置相应的标签。
MenuItem各项
*还要设置addActionListener(this)增加委托事件任务。
*/
menuGroup=newMenuBar();
editMenu=newMenu("
编辑(E)"
viewMenu=newMenu("
查看(V)"
helpMenu=newMenu("
帮助(H)"
copyItem=newMenuItem("
复制(C)Ctrl+C"
newMenuShortcut(KeyEvent.VK_C));
copyItem.addActionListener(this);
pasteItem=newMenuItem("
粘贴(P)Ctrl+V"
newMenuShortcut(KeyEvent.VK_V));
pasteItem.addActionListener(this);
standardModel=newMenuItem("
●标准型(T)"
standardModel.addActionListener(this);
numGroup=newCheckboxMenuItem("
数字分组(I)"
false);
numGroup.addItemListener(this);
aboutCal=newMenuItem("
关于计算器(A)"
aboutCal.addActionListener(this);
/*再把各个菜单相继加入到MenuBar中*/
menuGroup.add(editMenu);
menuGroup.add(viewMenu);
menuGroup.add(helpMenu);
editMenu.add(copyItem);
editMenu.add(pasteItem);
viewMenu.add(standardModel);
viewMenu.add(numGroup);
helpMenu.add(aboutCal);
对总框架的总体布局
OverallArrangement()是根据mainFrame的框架大小,把文本框answerText,内存使用的情况文本框memoryState,内存操作键MRMSM+MC,退格键BackSpace清除键CE,清空键C,以及主键盘区的各键按照一定的比例位置加入到mainFrame中.
voidOverallArrangement()
PaneltextPanel=newPanel();
//文本框的容器
PanelupperPanel=newPanel();
//计算器上部分的容器
PanelcenterPanel=newPanel();
//计算器中部的容器
PanelmainPanel=newPanel();
//主键盘区的容器
PanelleftPanel=newPanel();
//内存区的容器
PanelrightPanel=newPanel();
//数字及相应的操作键盘区
mainFrame.setMenuBar(menuGroup);
//为主框架设置菜单栏
mainFrame.add(upperPanel,BorderLayout.NORTH);
//把上容器放在主框架的北面
mainFrame.add(centerPanel);
//把中容器放在主框架的中部
mainFrame.add(mainPanel,BorderLayout.SOUTH);
//把主容器放在主框架的南面
/*设置主框架的上半部分*/
textPanel.add(answerText);
//把文本框添加到文本容器中
upperPanel.add(textPanel);
//把文本容器放入上容器中
/*设置主框架的中部*/
//采用流式布局,各组件相互间隔10个像素
centerPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,10));
centerPanel.add(memoryState);
//把内存记忆框放在中容器中
centerPanel.add(buttonBackSpace);
//把退格键放在中容器中
centerPanel.add(buttonCE);
//把清除键放在中容器中
centerPanel.add(buttonC);
//把清空键放在中容器中
/*设置主框架的下半部分*/
leftPanel.setLayout(newGridLayout(4,1,0,2));
//左下角的容器采用4*1的网式布局
leftPanel.add(buttonMC);
//添加MC
leftPanel.add(buttonMR);
//添加MR
leftPanel.add(buttonMS);
//添加MS
leftPanel.add(buttonMADD);
//添加M+
mainPanel.add(leftPanel,BorderLayout.WEST);
//把此容器放在主容器的西面
/*设置主键盘区*/
rightPanel.setLayout(newGridLayout(4,5,3,3));
//采用4*5的网式布局,相互间隔3各像素
/*添加各键*/
rightPanel.add(buttonNum[7]);
rightPanel.add(buttonNum[8]);
rightPanel.add(buttonNum[9]);
rightPanel.add(buttonDiv);
rightPanel.add(buttonSqrt);
rightPanel.add(buttonNum[4]);
rightPanel.add(buttonNum[5]);
rightPanel.add(buttonNum[6]);
rightPanel.add(buttonMul);
rightPanel.add(buttonMod);
rightPanel.add(buttonNum[1]);
rightPanel.add(buttonNum[2]);
rightPanel.add(buttonNum[3]);
rightPanel.add(buttonSub);
rightPanel.add(buttonReciprocal);
rightPanel.add(buttonNum[0]);
rightPanel.add(buttonSign);
rightPanel.add(buttonDot);
rightPanel.add(buttonAdd);
rightPanel.add(buttonEqual);
mainPanel.add(rightPanel,BorderLayout.CENTER);
计算器构造函数是对各布局函数的调用
SimpleCalculator()
initMainFrame();
initTextField();
initButtons();
initMenu();
OverallArrangement();
reSet();
mainFrame.setVisible(true);
B)计算运算部分程序的执行过程:
a)运算部分变量的定义
stringBuffertextBuffer;
//记录数值的字符串
intnumDot;
//小数点的个数
intoperator;
//操作符:
1-加法2-减法3-乘法4-除法
doublefirstValue,secondValue,result;
//第一、二个数及结果
booleanenterSecond;
//是否已经输入了第二个数
intforFirOrSec;
//此时输入的是第一个还是第二个数
booleanb_remFir,b_remSec,b_remFun;
//指示是否此时还记的上次的数和运算符
intremFun;
//记住上次的运算符
doubleremFir,remSec;
//记住上次参加运算的第一二个数
booleanisNumGroup=false;
//记录是否为数字分组
booleancanBeBack;
//是否可以使用退格键
doublememory;
//用于内存操作时保存的数据
b)各功能函数简介
reset函数
reSet()是把各属性设置为原始值,当按下
voidreSet()
answerText.setText("
0."
numDot=0;
remFun=operator=0;
firstValue=secondValue=result=0.0;
enterSecond=false;
forFirOrSec=1;
b_remFir=b_remSec=b_remFun=false;
remFir=remSec=0.0;
canBeBack=true;
showScreen函数
showScreen()是当按下了数字键后,在屏幕上显示。
如果有数字分组项
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 计算器 实验 报告