import java.io.*; |
import java.text.Format; |
import java.text.NumberFormat; |
import java.awt.*; |
import java.awt.event.*; |
public class Calc { |
public static void main(String[] args){ |
CalcFrame CF = new CalcFrame(); |
} |
} |
class CalcFrame extends Frame{ |
public TextField inputArea = new TextField( 30 ); |
Panel p1 = new Panel(),p2 = new Panel(); |
boolean dotFg = false ; //记录有没有按下小数点 |
boolean opFlag = false ; |
double d1,d2; //两操作 数 |
int whichSymbol = 0 ; |
int dfg = 1 ; |
numButton b1 = new numButton( "1" ) |
,b2 = new numButton( "2" ) |
,b3 = new numButton( "3" ) |
,b4 = new numButton( "4" ) |
,b5 = new numButton( "5" ) |
,b6 = new numButton( "6" ) |
,b7 = new numButton( "7" ) |
,b8 = new numButton( "8" ) |
,b9 = new numButton( "9" ) |
,b0 = new numButton( "0" ); |
|
zfButton bzf= new zfButton( "-" ); |
dotButton dot = new dotButton( "." ); |
basCalButton add = new basCalButton( "+" ) |
,sub = new basCalButton( "-" ) |
,mul = new basCalButton( "*" ) |
,div = new basCalButton( "/" ); |
funCalButton sqrt = new funCalButton( "sqrt" ) |
,sin = new funCalButton( "sin" ) |
,cos = new funCalButton( "cos" ) |
,power = new funCalButton( "power" ) |
,ln = new funCalButton( "ln" ); |
clearButton1 ce = new clearButton1( "CE" ); |
clearButton2 back = new clearButton2( "<-" ); |
resultButton equal = new resultButton( "=" ); |
|
public CalcFrame(){ |
|
super ( "Calculator" ); |
setLayout( new FlowLayout()); |
setBackground(Color.lightGray); |
setSize( 250 , 180 ); |
setVisible( true ); |
inputArea.setBackground(Color.white); |
p1.setBackground(Color.white); |
p1.setSize( 100 , 100 ); |
p1.setLayout( new GridLayout( 4 , 3 )); |
p1.add(b1); |
p1.add(b2); |
p1.add(b3); |
p1.add(b4); |
p1.add(b5); |
p1.add(b6); |
p1.add(b7); |
p1.add(b8); |
p1.add(b9); |
p1.add(b0); |
p1.add(bzf); |
p1.add(dot); |
p2.setBackground(Color.white); |
p2.setSize( 100 , 100 ); |
p2.setLayout( new GridLayout( 4 , 3 )); |
p2.add(div); |
p2.add(sqrt); |
p2.add(ln); |
p2.add(mul); |
p2.add(sin); |
p2.add(back); |
p2.add(sub); |
p2.add(cos); |
p2.add(ce); |
p2.add(add); |
p2.add(power); |
p2.add(equal); |
|
add( "North" ,inputArea); |
add(p1); |
add(p2); |
|
addWindowListener( new WindowAdapter(){ |
public void windowClosing(WindowEvent e){ |
System.exit( 0 );} |
}); |
} |
|
|
|
class numButton extends Button implements ActionListener{ //数字键类 |
public String s1; |
public numButton(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
if ( inputArea.getText().equals( "0.0" )||opFlag ) |
{ |
inputArea.setText( "" ); |
opFlag = false ; |
} |
String temp = inputArea.getText(); |
inputArea.setText( "" ); |
inputArea.setText(temp+s1); |
|
|
} |
|
} |
class zfButton extends Button implements ActionListener{ //正负键 |
public String s1; |
static final int flag = 0 ; |
public zfButton(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
|
String temp = inputArea.getText(); |
if (!dotFg) |
inputArea.setText( "" ); |
inputArea.setText( "-" +temp); |
|
|
} |
|
} |
class dotButton extends Button implements ActionListener{ |
public String s1; |
public dotButton(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
dotFg = true ; |
String temp = inputArea.getText(); |
if (temp.equals( "" )) |
inputArea.setText( "0." ); |
else { |
inputArea.setText(temp+ "." ); |
|
} |
|
} |
} |
class basCalButton extends Button implements ActionListener{ |
public String s1; |
public basCalButton(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
opFlag = true ; |
d1 = Double.parseDouble(inputArea.getText()); |
inputArea.setText( "" ); |
if (s1.equals( "+" )) |
whichSymbol = 1 ; |
else if (s1.equals( "-" )) |
whichSymbol = 2 ; |
else if (s1.equals( "*" )) |
whichSymbol = 3 ; |
else if (s1.equals( "/" )) |
whichSymbol = 4 ; |
} |
} |
class funCalButton extends Button implements ActionListener{ |
public String s1; |
public funCalButton(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
double temp = Double.parseDouble(inputArea.getText()); |
if (s1.equals( "sqrt" )) |
temp = Math.sqrt(temp* 3.14159 / 180 ); |
else if (s1.equals( "sin" )) |
temp = Math.sin(temp* 3.14159 / 180 ); |
else if (s1.equals( "cos" )) |
temp = Math.cos(temp* 3.14159 / 180 ); |
else if (s1.equals( "power" )) |
{ opFlag = true ; |
whichSymbol = 5 ; |
d1 = temp; |
inputArea.setText( "" ); |
} |
else if (s1.equals( "ln" )) |
temp = Math.log(temp); |
inputArea.setText(String.valueOf(temp)); |
} |
} |
class clearButton1 extends Button implements ActionListener{ |
public String s1; |
public clearButton1(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
inputArea.setText( "" ); |
d1 = 0 ; |
d2 = 0 ; |
dotFg = false ; |
whichSymbol = 0 ; |
opFlag = false ; |
} |
} |
class clearButton2 extends Button implements ActionListener{ |
public String s1; |
public clearButton2(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
String temp,s1; |
temp = inputArea.getText(); |
s1 = temp.substring( 0 , temp.length()- 1 ); |
inputArea.setText(s1); |
} |
} |
class resultButton extends Button implements ActionListener{ |
public String s1; |
public resultButton(String s){ |
super (s); |
s1 =s; |
setBackground(Color.cyan); |
addActionListener( this ); |
} |
|
public void actionPerformed(ActionEvent e) { //重写响应单击操作 |
double result = 0 ; |
d2 = Double.parseDouble(inputArea.getText()); |
switch (whichSymbol){ |
case 1 : |
result = d1 + d2; |
break ; |
case 2 : |
result = d1 - d2; |
break ; |
case 3 : |
result = d1 * d2; |
break ; |
case 4 : |
result = d1 / d2; |
break ; |
case 5 : |
result = Math.pow(d1,d2); |
|
} |
NumberFormat form = NumberFormat.getIntegerInstance(); |
form.setMinimumFractionDigits( 8 ); |
String is = form.format(result); |
inputArea.setText(is); |
d1 = 0 ; |
d2 = 0 ; |
dotFg = false ; |
whichSymbol = 0 ; |
opFlag = false ; |
} |
} |
|
|
} |