孤獨者 - 心在黑暗裡旅行 ...... ... 至尊會員
遊蕩的過客 - 枉入紅塵若許年 .. ... - UID
- 18273
- 帖子
- 12122
- 精華
- 1273
- 積分
- 240737
- 金幣
- 492641
- 威望
- 5001
- 推廣
- 0
- 閱讀權限
- 99
- 來自
- 尋覓中
- 註冊時間
- 2006-6-24
- 最後登錄
- 2015-5-27
|
2樓
大 中
小 發表於 2006-8-7 20:27
引用:import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.text.*;
import java.util.*;
public class test extends JFrame {
private JPanel buttonPanel,fieldPanel;
private JButton buttons0,buttons1,buttons2,buttons3,buttons4,buttons5,
buttons6,buttons7,buttons8,buttons9,buttonsp,//0~9~.
buttonse,buttonso,buttonsac,//=,c,ac
buttonsa,buttonsb,buttonsc,buttonsd,//+ - * /
buttonsdel,buttonssin;//del -
private String tmp1 = new String("");//TEMP1暫存字串
private String tmp2 = new String("0");//TEMP2暫存字串初始為0
private int op = 0;//把按入四則運算的數值直接作家法運算的state
private int op2= 0;//連續計算狀態
private int pt = 0;//小數點的state
private int optr = 1;//四則運算的state
private int flag = 0;//按下等於後再輸入數字的state
private int sign = 0;//負數的state
private double num1;//輸入暫存變數
private double num2;//答案暫存變數
private JTextField label1;
public test()
{
super( "我是計算機" );
Container container = getContentPane();
Icon bug0 =new ImageIcon("gif0411.gif");
Icon bug1 =new ImageIcon("gif0422.gif");
Icon bug2 =new ImageIcon("gif0433.gif");
Icon bug3 =new ImageIcon("gif0444.gif");
Icon bug4 =new ImageIcon("gif0455.gif");
Icon bug5 =new ImageIcon("gif0466.gif");
Icon bug6 =new ImageIcon("gif0477.gif");
Icon bug7 =new ImageIcon("gif0488.gif");
Icon bug8 =new ImageIcon("gif0499.gif");
Icon bug9 =new ImageIcon("gif0500.gif");
Icon buga =new ImageIcon("gif051.gif");
Icon bugb =new ImageIcon("gif052.gif");
Icon bugc =new ImageIcon("gif053.gif");
Icon bugd =new ImageIcon("gif054.gif");
Icon buge =new ImageIcon("gif055.gif");
Icon bugo =new ImageIcon("gif056.gif");
Icon bugp =new ImageIcon("gif057.gif");
Icon bugac =new ImageIcon("gif058.gif");
Icon bugsign=new ImageIcon("gif059.gif");
Icon bugdel =new ImageIcon("gif060.gif");
Icon bug00 =new ImageIcon("gif041.gif");
Icon bug11 =new ImageIcon("gif042.gif");
Icon bug22 =new ImageIcon("gif043.gif");
Icon bug33 =new ImageIcon("gif044.gif");
Icon bug44 =new ImageIcon("gif045.gif");
Icon bug55 =new ImageIcon("gif046.gif");
Icon bug66 =new ImageIcon("gif047.gif");
Icon bug77 =new ImageIcon("gif048.gif");
Icon bug88 =new ImageIcon("gif049.gif");
Icon bug99 =new ImageIcon("gif050.gif");
buttons0=new JButton(bug0);
buttons0.setRolloverIcon(bug00);
buttons1=new JButton(bug1);
buttons1.setRolloverIcon(bug11);
buttons2=new JButton(bug2);
buttons2.setRolloverIcon(bug22);
buttons3=new JButton(bug3);
buttons3.setRolloverIcon(bug33);
buttons4=new JButton(bug4);
buttons4.setRolloverIcon(bug44);
buttons5=new JButton(bug5);
buttons5.setRolloverIcon(bug55);
buttons6=new JButton(bug6);
buttons6.setRolloverIcon(bug66);
buttons7=new JButton(bug7);
buttons7.setRolloverIcon(bug77);
buttons8=new JButton(bug8);
buttons8.setRolloverIcon(bug88);
buttons9=new JButton(bug9);
buttons9.setRolloverIcon(bug99);
buttonse=new JButton(buge);
buttonso=new JButton(bugo);
buttonsa=new JButton(buga);
buttonsb=new JButton(bugb);
buttonsc=new JButton(bugc);
buttonsd=new JButton(bugd);
buttonsp=new JButton(bugp);
buttonsdel=new JButton(bugdel);
buttonssin=new JButton(bugsign);
buttonsac=new JButton(bugac);
label1=new JTextField("0");
label1.setHorizontalAlignment( JTextField.RIGHT );
buttonPanel = new JPanel();
fieldPanel = new JPanel();
buttonPanel.setLayout( new GridLayout(4,4,5,32 ));
fieldPanel.setLayout( new GridLayout() );
fieldPanel.add(label1);
buttonPanel.add(buttons1);
buttonPanel.add(buttons2);
buttonPanel.add(buttons3);
buttonPanel.add(buttonsa);
buttonPanel.add(buttonsac);
buttonPanel.add(buttons4);
buttonPanel.add(buttons5);
buttonPanel.add(buttons6);
buttonPanel.add(buttonsb);
buttonPanel.add(buttonso);
buttonPanel.add(buttons7);
buttonPanel.add(buttons8);
buttonPanel.add(buttons9);
buttonPanel.add(buttonsc);
buttonPanel.add(buttonsdel);
buttonPanel.add(buttons0);
buttonPanel.add(buttonsp);
buttonPanel.add(buttonse);
buttonPanel.add(buttonsd);
buttonPanel.add(buttonssin);
ButtonHandler handler = new ButtonHandler();
buttons0.addActionListener( handler );
buttons1.addActionListener( handler );
buttons2.addActionListener( handler );
buttons3.addActionListener( handler );
buttons4.addActionListener( handler );
buttons5.addActionListener( handler );
buttons6.addActionListener( handler );
buttons7.addActionListener( handler );
buttons8.addActionListener( handler );
buttons9.addActionListener( handler );
buttonsp.addActionListener( handler );
buttonsa.addActionListener( handler );
buttonsb.addActionListener( handler );
buttonsc.addActionListener( handler );
buttonsd.addActionListener( handler );
buttonse.addActionListener( handler );
buttonso.addActionListener( handler );
buttonsdel.addActionListener( handler );
buttonssin.addActionListener( handler );
buttonsac.addActionListener( handler );
container.add( buttonPanel , BorderLayout.CENTER);
container.add( fieldPanel , BorderLayout.NORTH);
setSize(300,350);
setVisible(true);
}//end 建構式
public static void main( String args[] )
{
test t = new test();
t.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}//end main
private class ButtonHandler implements ActionListener {
public void actionPerformed( ActionEvent e )
{
if (e.getSource()==buttonso)//清除
{ //把全部的狀態重設為0並重新輸入
label1.setText("0");
tmp1 = "";
pt = 0;
sign = 0;
}//end if
if (e.getSource()==buttonsac)//ac
{ //把全部的資料清空並呼叫begin狀態初始設定
label1.setText("0");
begin();
}//end if
if (e.getSource()==buttons1)//1
{
op = 0; //設定op state為0
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText(""); //先清空輸入資料
flag = 0; //把flag state設定為0
}
if (flag == 1) //如果是運算過後的資料劉在field內
{
label1.setText(""); //先清空輸入資料
flag = 0; //把flag state設定為0
}
tmp1 = label1.getText();//取得目前field內的內容
tmp1 += "1"; //並更新其內容為累加1
label1.setText(tmp1); //輸出字串
}//end if
if (e.getSource()==buttons2)//2
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "2";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons3)//3
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "3";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons4)//4
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "4";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons5)//5
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "5";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons6)//6
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "6";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons7)//7
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "7";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons8)//8
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "8";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons9)//9
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if(label1.getText().equals("0"))
{
label1.setText("");
flag = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}
tmp1 = label1.getText();
tmp1 += "9";
label1.setText(tmp1);
}//end if
if (e.getSource()==buttons0)//0
{
op = 0;
if (op2 == 1)
{
begin();
label1.setText("");
op2 = 0;
}
if (flag == 1)
{
label1.setText("");
flag = 0;
}//
if (tmp1.equals("0") != true)//如果目前內容不為0
{
tmp1 = label1.getText(); //取得目前資料內容
tmp1 = tmp1 + "0"; //把目前資料累加0
label1.setText(tmp1); //輸出運算過後的內容
}
}//end if
if (e.getSource()==buttonsp)//點
{
if (pt == 0) //判斷小數點是否輸入過
{ //如果沒有輸入過
tmp1 = label1.getText(); //先取得目前資料內容
if (tmp1.equals("")) //如果沒有資料的話
{
tmp1 = "0" + "." + tmp1; //在小數點前面加0
}else tmp1 = tmp1 + "."; //如果目前資料不為0在目前資料後面加小數點
label1.setText(tmp1); //輸出運算過後的資料
pt = 1; //把pt state設定為1
}
}//end if
if (e.getSource()==buttonsd)//除
{
op++; //把op狀態累加為1
calculator(tmp1); //呼叫calculator()把目前的資料內容加起來
optr = 4; //設定運算狀態為4做除法
op2=0;
}//end if
if (e.getSource()==buttonsc)//乘
{
op++; //把op狀態累加為1
calculator(tmp1); //呼叫calculator()把目前的資料內容加起來
optr = 3; //設定運算狀態為3做乘法
op2=0;
}//end if
if (e.getSource()==buttonsb)//減
{
op++; //把op狀態累加為1
calculator(tmp1); //呼叫calculator()把目前的資料內容加起來
optr = 2; //設定運算狀態為2做減法
op2=0;
}//end if
if (e.getSource()==buttonsa)//加
{
op++; //把op狀態累加為1
calculator(tmp1); //呼叫calculator()把目前的資料內容加起來
optr = 1; //設定運算狀態為1做加法
op2=0;
}//end if
if (e.getSource()==buttonse)//==
{
if (op == 1)calculator(tmp2);//如果按下四則運算就呼叫calculator()把目前資料累加至被加數
if (op == 0) //如果沒有按四則運算就按等於
{
op = 1; //運算狀態設定為做加法
calculator(tmp1); //呼叫calculator()把目前資料累加至加數
}
op2=1;//begin(); //運算過後呼叫begin()重新設定狀態
}//end if
if (e.getSource()==buttonsdel)//del
{
int i = tmp1.length(); //先取得目前資料的長度
tmp1 = tmp1.substring(0,i-1);//把目前長度減1的數字字串取消掉
label1.setText(tmp1); //輸出運算過後的資料字串
}//end if
if (e.getSource()==buttonssin)//負號
{
if (sign == 0) //如果未輸入負號
tmp1 = "-" + tmp1; //把負號累加到目前的資料
int i = tmp1.length(); //取得目前資料內容
if (sign == 1) //如果已經輸入過負號
tmp1 = tmp1.substring(1, i); //取出目前長度的資料起點為1也就是沒有負號
label1.setText(tmp1); //輸出運算過後的資料
sign = 1 - sign; //更改負號state的狀態
}//end if
}//end actionPerformed
}//end ButtonHandler
public void calculator(String tmp1)
{
if(op == 1){
num1 = Double.valueOf(tmp1).doubleValue();//(加減乘除)數
num2 = Double.valueOf(tmp2).doubleValue();//被(加減乘除)數
pt = 0; //重新設定pt state為0
sign = 0; //設定負數state為0
if (optr == 1){
num2 = num2 + num1; //累加過後的數字輸出至被加數
tmp2 = Double.toString(num2); //把運算過後的資料轉態成字串
}
if (optr == 2){
num2 = num2 - num1; //累減過後的數字輸出至被減數
tmp2 = Double.toString(num2); //把運算過後的資料轉態成字串
}
if (optr == 3){
num2 = num2 * num1; //累加過後的數字輸出至被加數
tmp2 = Double.toString(num2); //把運算過後的資料轉態成字串
}
if (optr == 4){
num2 = num2 / num1; //累加過後的數字輸出至被加數
tmp2 = Double.toString(num2); //把運算過後的資料轉態成字串
}
}
label1.setText(tmp2); //輸出運算過後的資料
tmp1 = ""; //把下一次的加數設定為空字串
op = 1; //運算狀態設為1做加法
flag = 1; //設定flag state為1以便下次輸入數字可以先清空在輸入數字
}//end calculator
public void begin()
{
tmp1 = new String(""); //把下一次的加數設定為空字串
tmp2 = new String("0"); //把下一次的被加數設定為0
pt = 0; //初始小數點狀態為0
optr = 1; //設定運算狀態為加法
sign = 0; //設定負數state為0
flag = 0; //把flag state設定為0
}//end begin
}//end test class
|