更新声明:之前发的程序由于没有仔细调试,所以有一些bug,昨晚上有抽空调试更改了一下,对于之前除零没判错功能,以及结果小数保留位数问题进行了一些更正。希望大家多多包涵,如再有bug希望大家能不吝赐教,批评指正哈,呵呵。
最近Java课布置了一个课程设计,用Java模仿windows自带计算器自己写一个实现计算器程序,今天忙活了一天,终于搞定了,呵呵,下面是代码和界面:
http://s6/middle/6759f4614861486d062a5&690
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.Math.*;
class Win extends Frame implements
ActionListener,KeyListener
{
TextField textRes;
TextField text;
Button
buttonBack,buttonCE,buttonC,buttonMC,buttonMR,buttonMS,buttonMA,
buttonAdd,buttonMin,buttonMul,buttonDiv,buttonPoi,buttonRes,buttonX,
buttonSqr,buttonLeft,buttonRit;
Button buttonData[];
Panel panel[];
Box
boxV1,boxV2,boxV3,boxH;
boolean rs,divErr=false;
StackData stackData;
StackOper stackOper;
NumQueue queue;
double ms=0;
Win(String s)
{
super(s);
queue=new NumQueue();
stackData=new
StackData();
stackOper=new
StackOper();
rs=false;
textRes=new TextField(30);
text=new TextField(2);
Font font=new Font("Arial
Black",Font.PLAIN,15);
text.setForeground(Color.blue);
text.setFont(font);
text.setEditable(false);
textRes.setEditable(false);
buttonData=new
Button[10];
for(int
i=0;i<10;i++)
{
buttonData[i]=new Button("
"+String.valueOf(i)+" ");
buttonData[i].setForeground(Color.blue);
buttonData[i].addActionListener(this);
}
buttonBack=new
Button("Backspace");
buttonCE=new
Button("
CE ");
buttonC=new Button("C");
buttonMC=new
Button("MC");
buttonMR=new
Button("MR");
buttonMS=new
Button("MS");
buttonMA=new
Button("M+");
buttonAdd=new
Button(" + ");
buttonMin=new
Button(" - ");
buttonMul=new
Button(" * ");
buttonDiv=new
Button(" /
");
buttonPoi=new
Button(" .
");
buttonRes=new Button("
= ");
buttonX=new Button(" 1/x
");
buttonSqr=new
Button("sqrt");
buttonLeft=new
Button(" (
");
buttonRit=new
Button(" )
");
panel=new Panel[5];
for(int
i=0;i<5;i++)
{
panel[i]=new Panel();
}
boxV1=Box.createVerticalBox();
boxV2=Box.createVerticalBox();
boxV3=Box.createVerticalBox();
boxH=Box.createHorizontalBox();
Font f=new Font("黑体",Font.PLAIN,15);
buttonBack.setForeground(Color.red);
buttonBack.setFont(f);
buttonCE.setForeground(Color.red);
buttonCE.setFont(f);
buttonC.setForeground(Color.red);
buttonC.setFont(f);
buttonMC.setForeground(Color.red);
buttonMR.setForeground(Color.red);
buttonMS.setForeground(Color.red);
buttonMA.setForeground(Color.red);
buttonCE.setForeground(Color.red);
buttonAdd.setForeground(Color.red);
buttonMin.setForeground(Color.red);
buttonMul.setForeground(Color.red);
buttonDiv.setForeground(Color.red);
buttonRes.setForeground(Color.red);
buttonPoi.setForeground(Color.blue);
buttonSqr.setForeground(Color.blue);
buttonLeft.setForeground(Color.blue);
buttonRit.setForeground(Color.blue);
buttonX.setForeground(Color.blue);
panel[0].add(buttonBack);
panel[0].add(buttonCE);
panel[0].add(buttonC);
panel[1].add(buttonData[7]);
panel[1].add(buttonData[8]);
panel[1].add(buttonData[9]);
panel[1].add(buttonDiv);
panel[1].add(buttonSqr);
panel[2].add(buttonData[4]);
panel[2].add(buttonData[5]);
panel[2].add(buttonData[6]);
panel[2].add(buttonMul);
panel[2].add(buttonLeft);
panel[3].add(buttonData[1]);
panel[3].add(buttonData[2]);
panel[3].add(buttonData[3]);
panel[3].add(buttonMin);
panel[3].add(buttonRit);
panel[4].add(buttonData[0]);
panel[4].add(buttonX);
panel[4].add(buttonPoi);
panel[4].add(buttonAdd);
panel[4].add(buttonRes);
boxV3.add(panel[0]);
boxV3.add(Box.createVerticalStrut(6));
for(int
i=1;i<5;i++)
{
boxV3.add(panel[i]);
boxV3.add(Box.createVerticalStrut(2));
}
boxV2.add(text);
boxV2.add(Box.createVerticalStrut(9));
boxV2.add(buttonMC);
boxV2.add(Box.createVerticalStrut(7));
boxV2.add(buttonMR);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(buttonMS);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(buttonMA);
boxH.add(boxV2);
boxH.add(Box.createHorizontalStrut(13));
boxH.add(boxV3);
boxV1.add(textRes);
boxV1.add(Box.createVerticalStrut(13));
boxV1.add(boxH);
add(boxV1);
addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
buttonBack.addActionListener(this);
buttonCE.addActionListener(this);
buttonC.addActionListener(this);
buttonDiv.addActionListener(this);
buttonMul.addActionListener(this);
buttonAdd.addActionListener(this);
buttonMin.addActionListener(this);
buttonPoi.addActionListener(this);
buttonX.addActionListener(this);
buttonRes.addActionListener(this);
buttonSqr.addActionListener(this);
buttonLeft.addActionListener(this);
buttonRit.addActionListener(this);
buttonMC.addActionListener(this);
buttonMR.addActionListener(this);
buttonMS.addActionListener(this);
buttonMA.addActionListener(this);
textRes.addKeyListener(this);
buttonCE.addKeyListener(this);
setBounds(100,100,270,260);
setVisible(true);
setLayout(new
FlowLayout());
validate();
}
public void keyPressed(KeyEvent e)
{
String
str=textRes.getText();
if(e.getKeyCode()==KeyEvent.VK_0||e.getKeyCode()==KeyEvent.VK_NUMPAD0)
{
if(rs==true)
{
textRes.setText(String.valueOf(0));
rs=false;
}
else
textRes.setText(str+0);
}
if(e.getKeyCode()==KeyEvent.VK_1||e.getKeyCode()==KeyEvent.VK_NUMPAD1)
{
if(rs==true)
{
textRes.setText(String.valueOf(1));
rs=false;
}
else
textRes.setText(str+1);
}
if(e.getKeyCode()==KeyEvent.VK_2||e.getKeyCode()==KeyEvent.VK_NUMPAD2)
{
if(rs==true)
{
textRes.setText(String.valueOf(2));
rs=false;
}
else
textRes.setText(str+2);
}
if(e.getKeyCode()==KeyEvent.VK_3||e.getKeyCode()==KeyEvent.VK_NUMPAD3)
{
if(rs==true)
{
textRes.setText(String.valueOf(3));
rs=false;
}
else
textRes.setText(str+3);
}
if(e.getKeyCode()==KeyEvent.VK_4||e.getKeyCode()==KeyEvent.VK_NUMPAD4)
{
if(rs==true)
{
textRes.setText(String.valueOf(4));
rs=false;
}
else
textRes.setText(str+4);
}
if(e.getKeyCode()==KeyEvent.VK_5||e.getKeyCode()==KeyEvent.VK_NUMPAD5)
{
if(rs==true)
{
textRes.setText(String.valueOf(5));
rs=false;
}
else
textRes.setText(str+5);
}
if(e.getKeyCode()==KeyEvent.VK_6||e.getKeyCode()==KeyEvent.VK_NUMPAD6)
{
if(rs==true)
{
textRes.setText(String.valueOf(6));
rs=false;
}
else
textRes.setText(str+6);
}
if(e.getKeyCode()==KeyEvent.VK_7||e.getKeyCode()==KeyEvent.VK_NUMPAD7)
{
if(rs==true)
{
textRes.setText(String.valueOf(7));