?? computerpad.java
字號:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;
public class ComputerPad extends Frame implements ActionListener,KeyListener
{
NumberButton numberButton[];
OperationButton oprationButton[];
Button 小數點按鈕,正負號按鈕,退格按鈕,
求倒數按鈕,等號按鈕,清零按鈕;
Panel panel;
JTextField resultShow;
String 運算符號[]={"+","-","*","/"};
LinkedList 鏈表;
boolean 是否按下等號=false;
public ComputerPad()
{
JFrame frame= new JFrame();
鏈表=new LinkedList();
numberButton=new NumberButton[10];
for(int i=0;i<=9;i++)
{
numberButton[i]=new NumberButton(i);
numberButton[i].addActionListener(this);
}
oprationButton=new OperationButton[4];
for(int i=0;i<4;i++)
{
oprationButton[i]=new OperationButton(運算符號[i]);
oprationButton[i].addActionListener(this);
}
小數點按鈕=new Button(".");
正負號按鈕 =new Button("+/-");
等號按鈕=new Button("=");
求倒數按鈕=new Button("1/x");
退格按鈕=new Button("退格");
清零按鈕=new Button("C");
清零按鈕.setForeground(Color.red);
退格按鈕.setForeground(Color.red);
等號按鈕.setForeground(Color.red);
求倒數按鈕.setForeground(Color.blue);
正負號按鈕.setForeground(Color.blue);
小數點按鈕.setForeground(Color.blue);
退格按鈕.addActionListener(this);
清零按鈕.addActionListener(this);
等號按鈕.addActionListener(this);
小數點按鈕.addActionListener(this);
正負號按鈕.addActionListener(this);
求倒數按鈕.addActionListener(this);
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
resultShow.setBackground(Color.white);
resultShow.setEditable(true);
panel=new Panel();
panel.setLayout(new GridLayout(4,5));
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(oprationButton[0]);
panel.add(清零按鈕);
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(oprationButton[1]);
panel.add(退格按鈕);
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(oprationButton[2]);
panel.add(求倒數按鈕);
panel.add(numberButton[0]);
panel.add(正負號按鈕);
panel.add(小數點按鈕);
panel.add(oprationButton[3]);
panel.add(等號按鈕);
frame.getContentPane().add(panel,BorderLayout.CENTER);
frame.getContentPane().add(resultShow,BorderLayout.NORTH);
frame.setVisible(true);
frame.setBounds(100,50,240,180);
frame.setResizable(false);
frame.validate();
resultShow.setFocusable(true);
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
String sKey = String.valueOf ( e.getKeyChar () ) ;
}
public void keyPressed(KeyEvent e)
{
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() instanceof NumberButton )
{
NumberButton b=(NumberButton)e.getSource();
if(鏈表.size()==0)
{
int number=b.getNumber();
鏈表.add(""+number);
resultShow.setText(""+number);
是否按下等號=false;
}
else if(鏈表.size()==1&&是否按下等號==false)
{
int number=b.getNumber();
String num=(String)鏈表.getFirst();
String s=num.concat(""+number);
鏈表.set(0,s);
resultShow.setText(s);
}
else if(鏈表.size()==1&&是否按下等號==true)
{
int number=b.getNumber();
鏈表.removeFirst();
鏈表.add(""+number);
是否按下等號=false;
resultShow.setText(""+number);
}
else if(鏈表.size()==2)
{
int number=b.getNumber();
鏈表.add(""+number);
resultShow.setText(""+number);
}
else if(鏈表.size()==3)
{
int number=b.getNumber();
String num=(String)鏈表.getLast();
String s=num.concat(""+number);
鏈表.set(2,s);
resultShow.setText(s);
}
}
else if(e.getSource() instanceof OperationButton)
{
OperationButton b=(OperationButton)e.getSource();
if(鏈表.size()==1)
{
String fuhao=b.get運算符號();
鏈表.add(fuhao);
}
else if(鏈表.size()==2)
{
String fuhao=b.get運算符號();
鏈表.set(1,fuhao);
}
else if(鏈表.size()==3)
{
String fuhao=b.get運算符號();
String number1=(String)鏈表.getFirst();
String number2=(String)鏈表.getLast();
String 運算符號=(String)鏈表.get(1);
try
{
double n1=Double.parseDouble(number1);
double n2=Double.parseDouble(number2);
double n=0;
if(運算符號.equals("+"))
{
n=n1+n2;
}
else if(運算符號.equals("-"))
{
n=n1-n2;
}
else if(運算符號.equals("*"))
{
n=n1*n2;
}
else if(運算符號.equals("/"))
{
n=n1/n2;
}
鏈表.clear();
鏈表.add(""+n);
鏈表.add(fuhao);
resultShow.setText(""+n);
}
catch(Exception ee)
{
}
}
}
else if(e.getSource()==等號按鈕)
{
是否按下等號=true;
if(鏈表.size()==1||鏈表.size()==2)
{
String num=(String)鏈表.getFirst();
resultShow.setText(""+num);
}
else if(鏈表.size()==3)
{
String number1=(String)鏈表.getFirst();
String number2=(String)鏈表.getLast();
String 運算符號=(String)鏈表.get(1);
try
{
double n1=Double.parseDouble(number1);
double n2=Double.parseDouble(number2);
double n=0;
if(運算符號.equals("+"))
{
n=n1+n2;
}
else if(運算符號.equals("-"))
{
n=n1-n2;
}
else if(運算符號.equals("*"))
{
n=n1*n2;
}
else if(運算符號.equals("/"))
{
n=n1/n2;
}
resultShow.setText(""+n);
鏈表.set(0,""+n);
鏈表.removeLast();
鏈表.removeLast();
}
catch(Exception ee)
{
}
}
}
else if(e.getSource()==小數點按鈕)
{
if(鏈表.size()==0)
{
是否按下等號=false;
}
else if(鏈表.size()==1)
{
String dot=小數點按鈕.getLabel();
String num=(String)鏈表.getFirst();
String s=null;
if(num.indexOf(dot)==-1)
{
s=num.concat(dot);
鏈表.set(0,s);
}
else
{
s=num;
}
鏈表.set(0,s);
resultShow.setText(s);
}
else if(鏈表.size()==3)
{
String dot=小數點按鈕.getLabel();
String num=(String)鏈表.getLast();
String s=null;
if(num.indexOf(dot)==-1)
{
s=num.concat(dot);
鏈表.set(2,s);
}
else
{
s=num;
}
resultShow.setText(s);
}
}
else if(e.getSource()==退格按鈕)
{
if(鏈表.size()==1)
{
String num=(String)鏈表.getFirst();
if(num.length()>=1)
{
num=num.substring(0,num.length()-1);
鏈表.set(0,num);
resultShow.setText(num);
}
else
{
鏈表.removeLast();
resultShow.setText("0");
}
}
else if(鏈表.size()==3)
{
String num=(String)鏈表.getLast();
if(num.length()>=1)
{
num=num.substring(0,num.length()-1);
鏈表.set(2,num);
resultShow.setText(num);
}
else
{
鏈表.removeLast();
resultShow.setText("0");
}
}
}
else if(e.getSource()==正負號按鈕)
{
if(鏈表.size()==1)
{
String number1=(String)鏈表.getFirst();
try
{
double d=Double.parseDouble(number1);
d=-1*d;
String str=String.valueOf(d);
鏈表.set(0,str);
resultShow.setText(str);
if (d>10000||d<-10000)
throw new MyException(d);
System.out.println("\t 正常退出");
}
catch(MyException ee)
{
System.out.println("\t 捕獲異常:"+ee.toString( ));
}
}
else if(鏈表.size()==3)
{
String number2=(String)鏈表.getLast();
try
{
double d=Double.parseDouble(number2);
d=-1*d;
String str=String.valueOf(d);
鏈表.set(2,str);
resultShow.setText(str);
System.out.print(d);
if (d>10000||d<-10000)
throw new MyException(d);
System.out.println("\t 正常退出");
}
catch(MyException ee)
{
System.out.println("\t 捕獲異常:"+ee.toString( ));
}
}
}
else if(e.getSource()==求倒數按鈕)
{
if(鏈表.size()==1||鏈表.size()==2)
{
String number1=(String)鏈表.getFirst();
try
{
double d=Double.parseDouble(number1);
d=1.0/d;
String str=String.valueOf(d);
鏈表.set(0,str);
resultShow.setText(str);
if (d>10000||d<-10000)
throw new MyException(d);
System.out.println("\t 正常退出");
}
catch(MyException ee)
{
System.out.println("\t 捕獲異常:"+ee.toString( ));
}
}
else if(鏈表.size()==3)
{
String number2=(String)鏈表.getLast();
try
{
double d=Double.parseDouble(number2);
d=1.0/d;
String str=String.valueOf(d);
鏈表.set(0,str);
resultShow.setText(str);
if (d>10000||d<-10000)
throw new MyException(d);
System.out.println("h");
}
catch(MyException ee)
{
System.out.println("\t 捕獲異常:"+ee.toString( ));
}
}
}
else if(e.getSource()==清零按鈕)
{
是否按下等號=false;
resultShow.setText("0");
鏈表.clear();
}
}
public static void main(String args[])
{
new ComputerPad();
}
}
class MyException extends Exception
{ private double detail;
MyException(double d)
{ detail=d;}
public String toString( )
{ return "MyException"+detail;}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -