南邮JAVA实验2Word格式文档下载.docx
《南邮JAVA实验2Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《南邮JAVA实验2Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
importjavax.swing.border.BevelBorder;
importjava.awt.*;
importjava.awt.datatransfer.DataFlavor;
importjava.awt.datatransfer.Transferable;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.InputEvent;
importjava.awt.event.KeyEvent;
publicclassCalculatorextendsJFrameimplementsActionListener{
privateJMenuBarmenuBar=newJMenuBar();
privateJMenumenuEdit=newJMenu("
编辑(E)"
);
privateJMenuItemmenuItemCopy=newJMenuItem("
复制(C)"
KeyEvent.VK_C);
privateJMenuItemmenuItemCut=newJMenuItem("
粘贴(P)"
KeyEvent.VK_V);
privateJMenumenuView=newJMenu("
查看(V)"
privateJRadioButtonboxStand=newJRadioButton("
标准型(T)"
true);
privateJRadioButtonboxSience=newJRadioButton("
科学型(S)"
false);
privateJMenuItemmenuItemMath=newJMenuItem("
数学分组"
KeyEvent.VK_I);
privateJMenumenuHelp=newJMenu("
帮助(H)"
privateJMenuItemmenuItemHelp=newJMenuItem("
帮助主题"
KeyEvent.VK_H);
privateJMenuItemmenuItemAbout=newJMenuItem("
关于计算器"
KeyEvent.VK_A);
privateJPanelpanSave=newJPanel();
privateJPanelpanClear=newJPanel();
privateJPanelpanBtn=newJPanel();
privateJTextFieldmsg=newJTextField("
0"
privateJButton[]buttons=newJButton[27];
privateJLabellblInfo=newJLabel();
/**
*保存预执行操作的数
*/
privatedoublevalue=0;
*是否已经保存
privatebooleanhasSaved=false;
*保存的数字
privatedoublesaveNum=0;
*运算操作:
0:
无操作。
1:
加。
2:
减。
3:
乘。
4:
除。
privateintoperation=0;
*保存临时数据
privateStringBuffertmp=newStringBuffer();
*文字框允许输入的数字长度
privatestaticfinalintallowLength=32;
privatebooleanhasPressed=false;
*计算器界面类缺省构造函数。
publicCalculator(){
setSize(260,240);
setTitle("
计算器"
Toolkittk=Toolkit.getDefaultToolkit();
setLocation((tk.getScreenSize().width-getWidth())/2,(tk.getScreenSize().height-getHeight())/2);
initMenu();
initButton();
initAdd();
panSave.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_UP,0),"
UpPress"
panSave.getActionMap().put("
newButtonListener());
setResizable(false);
//noinspectionMagicConstant
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
*初始化菜单添加。
privatevoidinitMenu(){
//========菜单添加======================
setJMenuBar(menuBar);
menuBar.add(menuEdit);
menuEdit.setMnemonic(KeyEvent.VK_E);
menuEdit.add(menuItemCopy);
menuItemCopy.setMnemonic(KeyEvent.VK_C);
menuEdit.add(menuItemCut);
menuItemCut.setMnemonic(KeyEvent.VK_P);
menuBar.add(menuView);
menuView.setMnemonic(KeyEvent.VK_V);
ButtonGroupgroup=newButtonGroup();
group.add(boxStand);
group.add(boxSience);
menuView.add(boxStand);
menuView.add(boxSience);
menuView.addSeparator();
menuView.add(menuItemMath);
menuBar.add(menuHelp);
menuHelp.setMnemonic(KeyEvent.VK_H);
menuHelp.add(menuItemHelp);
menuHelp.addSeparator();
menuHelp.add(menuItemAbout);
menuItemCopy.addActionListener(this);
menuItemCut.addActionListener(this);
menuItemAbout.addActionListener(this);
//=========菜单添加OK===================
*初始化按钮。
按钮的初始化、部署、事件添加等。
privatevoidinitButton(){
ButtonListenerlistener=newButtonListener();
buttons[0]=newCalculateButton(listener,"
="
KeyEvent.VK_EQUALS,false);
buttons[1]=newCalculateButton(listener,"
+"
KeyEvent.VK_ADD,false,Color.RED);
buttons[2]=newCalculateButton(listener,"
-"
KeyEvent.VK_SUBTRACT,false,Color.RED);
buttons[3]=newCalculateButton(listener,"
*"
KeyEvent.VK_MULTIPLY,false,Color.RED);
buttons[4]=newCalculateButton(listener,"
/"
KeyEvent.VK_DIVIDE,false,Color.RED);
buttons[5]=newCalculateButton(listener,"
1/x"
KeyEvent.VK_R,false);
buttons[6]=newCalculateButton(listener,"
+/-"
KeyEvent.VK_F9,false);
buttons[7]=newCalculateButton(listener,"
sqrt"
buttons[8]=newCalculateButton(listener,"
%"
'
%'
buttons[9]=newCalculateButton(listener,"
."
KeyEvent.VK_PERIOD,false);
buttons[10]=newCalculateButton(listener,"
KeyEvent.VK_0,false);
buttons[11]=newCalculateButton(listener,"
1"
KeyEvent.VK_1,false);
buttons[12]=newCalculateButton(listener,"
2"
KeyEvent.VK_2,false);
buttons[13]=newCalculateButton(listener,"
3"
KeyEvent.VK_3,false);
buttons[14]=newCalculateButton(listener,"
4"
KeyEvent.VK_4,false);
buttons[15]=newCalculateButton(listener,"
5"
KeyEvent.VK_5,false);
buttons[16]=newCalculateButton(listener,"
6"
KeyEvent.VK_6,false);
buttons[17]=newCalculateButton(listener,"
7"
KeyEvent.VK_7,false);
buttons[18]=newCalculateButton(listener,"
8"
KeyEvent.VK_8,false);
buttons[19]=newCalculateButton(listener,"
9"
KeyEvent.VK_9,false);
buttons[20]=newCalculateButton(listener,"
MC"
KeyEvent.VK_L,true,Color.RED);
buttons[21]=newCalculateButton(listener,"
MR"
KeyEvent.VK_R,true,Color.RED);
buttons[22]=newCalculateButton(listener,"
MS"
KeyEvent.VK_M,true,Color.RED);
buttons[23]=newCalculateButton(listener,"
M+"
KeyEvent.VK_P,true,Color.RED);
buttons[24]=newCalculateButton(listener,"
Backspace"
KeyEvent.VK_BACK_SPACE,false,Color.RED,62,25);
buttons[25]=newCalculateButton(listener,"
CE"
KeyEvent.VK_DELETE,false,Color.RED,62,25);
buttons[26]=newCalculateButton(listener,"
C"
KeyEvent.VK_ESCAPE,false,Color.RED,62,25);
*初始化各个容器的添加。
privatevoidinitAdd(){
msg.setSize(240,20);
msg.setLocation(6,4);
msg.setEditable(false);
msg.setBackground(Color.WHITE);
msg.setMargin(newInsets(0,6,0,8));
msg.setHorizontalAlignment(JTextField.RIGHT);
lblInfo.setSize(30,26);
lblInfo.setLocation(8,30);
lblInfo.setBorder(newBevelBorder(BevelBorder.LOWERED));
lblInfo.setHorizontalAlignment(SwingConstants.CENTER);
panSave.setSize(35,150);
panSave.setLocation(6,60);
panSave.setLayout(newFlowLayout(FlowLayout.CENTER,3,3));
//panSave.setBorder(b);
//增加MC、MR、MS、M+
for(inti=20;
i<
24;
i++)
panSave.add(buttons[i]);
panClear.setSize(200,26);
panClear.setLocation(45,30);
//panClear.setBorder(b);
panClear.setLayout(newFlowLayout(FlowLayout.CENTER,3,0));
//增加Backspace、CE、C
for(inti=24;
27;
panClear.add(buttons[i]);
panBtn.setSize(200,150);
panBtn.setLocation(45,60);
//panBtn.setBorder(b);
panBtn.setLayout(newFlowLayout(FlowLayout.CENTER,4,3));
panBtn.add(buttons[17]);
//7
panBtn.add(buttons[18]);
//8
panBtn.add(buttons[19]);
//9
panBtn.add(buttons[4]);
//÷
panBtn.add(buttons[7]);
//sqrt
panBtn.add(buttons[14]);
//4
panBtn.add(buttons[15]);
//5
panBtn.add(buttons[16]);
//6
panBtn.add(buttons[3]);
//×
panBtn.add(buttons[8]);
//%
panBtn.add(buttons[11]);
//1
panBtn.add(buttons[12]);
//2
panBtn.add(buttons[13]);
//3
panBtn.add(buttons[2]);
//-
panBtn.add(buttons[5]);
//1/x
panBtn.add(buttons[10]);
//0
panBtn.add(buttons[6]);
//+/-
panBtn.add(buttons[9]);
//.
panBtn.add(buttons[1]);
//+
panBtn.add(buttons[0]);
//=
setLayout(null);
add(msg);
add(lblInfo);
add(panSave);
add(panClear);
add(panBtn);
publicstaticvoidmain(String[]args){
newCalculator();
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==menuItemCopy){
msg.selectAll();
msg.copy();
if(e.getSource()==menuItemCut){
try{
Transferablet=Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
if(t!
=null&
&
t.isDataFlavorSupported(DataFlavor.stringFlavor)){
Stringtext=t.getTransferData(DataFlavor.stringFlavor).toString();
String[]sp=text.split("
[\\D&
[^.]]"
if(sp.length>
0){
Stringstr=sp[sp.length-1];
System.out.println(str);
String[]sp2=str.split("
\\."
System.out.println(sp2.length);
if(sp2.length>
1){
Stringx=sp2[sp2.length-2];
text=(x.equals("
"
)?
"
:
x)+"
+sp2[sp2.length-1];
else
text=sp2[sp2.length-1];
msg.setText(text);
}catch(Exceptione1){
System.out.println("
错误:
+e1.getMessage());
privateclassButtonListenerextendsAbstractAction{
inti;
for(i=0;
buttons.length;
i++){
if(e.getActionCommand().equals(buttons[i].getText()))
break;
doublevalue2;
value2=Double.parseDouble(msg.getText());
}catch(NumberFormatExceptione1){
value2=0;
switch(i){
case0:
//=
if(operation!
=0){
doubleresult=0;
switch(operation){
case1:
result=value+value2;
case2:
result=value-value2;
case3:
result=value*value2;
case4:
result=value/value2;
showResult(result+"
hasPressed=false;
//+、-、*、/
=0&
hasPressed){
countResult(value2);
value=Double.parseDouble(msg.getText());
if(tmp.length()>
tmp=newStringBuffer();
operation=i;
case5:
//1/x
if(value2!
=0)
showResult((1/value2)+"
showResult("
case6:
//+/-
showResult((value2*-1)+"
case7:
//sqrt
showResult(Math.sqrt(value2)+"
case8:
//%
showResult((value*value2/100)+"
case9:
//.
if(tmp.toString().contains("
))
if(value2==0)
tmp.ap