import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class calculator extends JFrame implements ActionListener
{//這里我把JFrame寫成Frame,這個錯誤找了好久
?JFrame frame;
?
?private JButton jia=new JButton("+");
?private JButton jian=new JButton("-");
?private JButton cheng=new JButton("*");
?private JButton chu=new JButton("/");
?private JButton qiuyi=new JButton("%");
?private JButton deng=new JButton("=");
?private JButton fu=new JButton("+/-");
?private JButton dian=new JButton(".");
?private JButton kai=new JButton("sqrt");
?private JButton diao=new JButton("1/x");
?private JButton aa=new JButton("A");
?private JButton bb=new JButton("B");
?private JButton cc=new JButton("C");
?private JButton dd=new JButton("D");
?private JButton ee=new JButton("E");
?private JButton ff=new JButton("F");
?
?private TextField k1=new TextField();?
?private objConversion convert = new objConversion();
?
?JMenuItem copy,paste,s,t,help,about,me;
?JRadioButton sixteen,ten,eight,two;
?JButton backspace,ce,c,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;
?Container cp;
?
?JTextField text;
?String copycontent="";
?boolean clickable=true,clear=true;
?int all=0;
?double qian;
?String fuhao;
?int jin=10,first=1;
?
?
?public calculator()
?{
??setTitle("計算器-楊彩制作");
??setSize(400,300);
??setLocation(250,200);
??text=new JTextField(25);
?//?text.setEnabled(false);
??text.setText("0.");
??text.setHorizontalAlignment(JTextField.RIGHT);//從右到左
?
??JPanel cp1=new JPanel();
??JPanel cp2=new JPanel();
??JPanel cp3=new JPanel();
??
??cp=getContentPane();
??cp.add(cp1,"North");
??cp.add(cp2,"Center");
??cp.add(cp3,"South");
??
??cp1.setLayout(new GridLayout(1,6));
??cp2.setLayout(new GridLayout(2,4));
??cp3.setLayout(new GridLayout(6,6));
??
??sixteen=new JRadioButton("十六進制");
??sixteen.setVisible(false);
??ten=new JRadioButton("十進制",true);
??ten.setVisible(false);
??eight=new JRadioButton("八進制");
??eight.setVisible(false);?
??two=new JRadioButton("二進制");
??two.setVisible(false);
??sixteen.addActionListener(this);
??ten.addActionListener(this);
??eight.addActionListener(this);
??two.addActionListener(this);?
??ButtonGroup btg=new ButtonGroup();
??
??btg.add(sixteen);?
??btg.add(ten);?
??btg.add(eight);?
??btg.add(two);
?
??JTextField t3=new JTextField(25);
??cp1.add(text);
?//?text.setEnabled(false);
??text.setEditable(false);
??text.setBackground(new Color(255, 255, 255));
??
??cp2.add(sixteen);
??cp2.add(ten);
??cp2.add(eight);
??cp2.add(two);
??
??backspace=new JButton("Backspace");
??backspace.setForeground(new Color(255,0,0));
??backspace.addActionListener(this);
??ce=new JButton("CE");
??ce.setForeground(new Color(255,0,0));
??ce.addActionListener(this);
??c=new JButton("C");
??c.setForeground(new Color(255,0,0));
??c.addActionListener(this);
??k1.setVisible(false);
??cp2.add(k1);
??cp2.add(backspace);
??cp2.add(ce);
??cp2.add(c);
??
??num0=new JButton("0");
??num1=new JButton("1");
??num2=new JButton("2");
??num3=new JButton("3");
??num4=new JButton("4");
??num5=new JButton("5");
??num6=new JButton("6");
??num7=new JButton("7");
??num8=new JButton("8");
??num9=new JButton("9");
?
??cp3.add(num7);
??num7.addActionListener(this);
??cp3.add(num8);
??num8.addActionListener(this);
??cp3.add(num9);
??num9.addActionListener(this);
??cp3.add(chu);
??chu.setForeground(new Color(255,0,0));
??chu.addActionListener(this);
??cp3.add(kai);
??kai.addActionListener(this);
??cp3.add(num4);
??num4.addActionListener(this);
??cp3.add(num5);
??num5.addActionListener(this);
??cp3.add(num6);
??num6.addActionListener(this);
??cp3.add(cheng);
??cheng.setForeground(new Color(255,0,0));
??cheng.addActionListener(this);
??cp3.add(qiuyi);
??qiuyi.addActionListener(this);
??cp3.add(num1);
??num1.addActionListener(this);
??cp3.add(num2);
??num2.addActionListener(this);
??cp3.add(num3);
??num3.addActionListener(this);
??cp3.add(jian);
??jian.setForeground(new Color(255,0,0));
??jian.addActionListener(this);
??cp3.add(diao);
??diao.addActionListener(this);
??cp3.add(num0);
??num0.addActionListener(this);
??cp3.add(fu);
??fu.addActionListener(this);
??cp3.add(dian);
??dian.addActionListener(this);
??cp3.add(jia);
??jia.setForeground(new Color(255,0,0));
??jia.addActionListener(this);
??cp3.add(deng);
??deng.setForeground(new Color(255,0,0));
??deng.addActionListener(this);
??cp3.add(aa);
??aa.addActionListener(this);
??cp3.add(bb);
??bb.addActionListener(this);
??cp3.add(cc);
??cc.addActionListener(this);
??cp3.add(dd);
??dd.addActionListener(this);
??cp3.add(ee);
??ee.addActionListener(this);
??cp3.add(ff);
??ff.addActionListener(this);
??aa.setVisible(false);
??bb.setVisible(false);
??cc.setVisible(false);
??dd.setVisible(false);
??ee.setVisible(false);
??ff.setVisible(false);
?????
??JMenuBar mainMenu = new JMenuBar();
??setJMenuBar(mainMenu);
??JMenu editMenu = new JMenu("編輯");
??JMenu viewMenu = new JMenu("查看");
??JMenu helpMenu = new JMenu("幫助");
??mainMenu.add(editMenu);
??mainMenu.add(viewMenu);
??mainMenu.add(helpMenu);
??
??copy = new JMenuItem(" 復制");
??paste = new JMenuItem(" 粘貼");
??KeyStroke copyks=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);
? ??copy.setAccelerator(copyks);//設置退出菜單選項加上快捷鍵
? ??KeyStroke pasteks=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK);
? ??paste.setAccelerator(pasteks);//設置退出菜單選項加上快捷鍵
??editMenu.add(copy);
??editMenu.add(paste);
??copy.addActionListener(this);
??paste.addActionListener(this);
??
??t = new JMenuItem("●標準型");
??s = new JMenuItem("?? 科學型");
??viewMenu.add(t);
??viewMenu.add(s);
??t.addActionListener(this);
??s.addActionListener(this);
????
??help = new JMenuItem(" 幫助主題");
??about = new JMenuItem(" 關于計算器");
??me = new JMenuItem(" 作者主頁");
??helpMenu.add(help);
??helpMenu.add(about);?
??helpMenu.add(me);
??help.addActionListener(this);
??about.addActionListener(this);
??me.addActionListener(this);
??
??
??
??
??
??
??
?addWindowListener(new WindowDestroyer());//結束窗口
?}
?
?
?
?public void actionPerformed(ActionEvent e)
?
?{//響應動作代碼
??
??if(first==1)
??text.setText("");
??first=0;//第一次把文本框0.清空
?
? ?Object temp = e.getSource();
? ?if(temp==copy)
? ?{
???copycontent = text.getText();
??}
??if(temp==paste)
? ?{
???text.setText(text.getText()+copycontent);
??
??}
??if(temp==t)
??{//標準
???
???sixteen.setVisible(false);
???ten.setVisible(false);
???eight.setVisible(false);
???two.setVisible(false);
???t.setText("●標準型");
???s.setText("??? 科學型");
???aa.setVisible(false);
???bb.setVisible(false);
???cc.setVisible(false);
???dd.setVisible(false);
???ee.setVisible(false);
???ff.setVisible(false);
??}
??if(temp==s)
??{//科學
???
???sixteen.setVisible(true);
???ten.setVisible(true);
???eight.setVisible(true);
???two.setVisible(true);
???t.setText("?? 標準型");
???s.setText("●科學型");
???aa.setVisible(true);
???bb.setVisible(true);
???cc.setVisible(true);
???dd.setVisible(true);
???ee.setVisible(true);
???ff.setVisible(true);
???aa.setEnabled(false);
???bb.setEnabled(false);
???cc.setEnabled(false);
???dd.setEnabled(false);
???ee.setEnabled(false);
???ff.setEnabled(false);
???
???
??}
??if(temp==help)
??{ //打開系統幫助文件 要查資料
???try
???{
???? String filePath = "C:/WINDOWS/Help/calc.chm";
????? Runtime.getRuntime().exec("cmd.exe /c "+filePath);
???
???}
???catch(Exception eeee)
???{
????System.out.println("打開系統的計算器出錯");????
???}
??}
??if(temp==about)
??{
???JOptionPane.showMessageDialog(frame,"????? Java計算器\n????? 楊彩 制作\n\n ??}
??if(temp==me)
??{
???try
???{
????Process p = Runtime.getRuntime().exec("explorer ???}
???catch(Exception eeee)
???{
????System.out.println("打開指定網頁出錯");????
???}?
??}
??
??
??try
??{
??if(temp==sixteen)
??{
???String hex=text.getText();
???int inthex=Integer.parseInt(hex,jin);//先把數變為10進制??
???text.setText(convert.decHex(inthex)) ;
???jin=16;
???aa.setEnabled(true);
???bb.setEnabled(true);
???cc.setEnabled(true);
???dd.setEnabled(true);
???ee.setEnabled(true);
???ff.setEnabled(true);
???num2.setEnabled(true);
???num3.setEnabled(true);
???num4.setEnabled(true);
???num5.setEnabled(true);
???num6.setEnabled(true);
???num7.setEnabled(true);
???num8.setEnabled(true);
???num9.setEnabled(true);
?
??}
??if(temp==eight)
??{
???String oct =text.getText();
???int intoct=Integer.parseInt(oct,jin);??
???text.setText(convert.decOct(intoct)) ;
???jin=8;
???
???aa.setEnabled(false);
???bb.setEnabled(false);
???cc.setEnabled(false);
???dd.setEnabled(false);
???ee.setEnabled(false);
???ff.setEnabled(false);
???num2.setEnabled(true);
???num3.setEnabled(true);
???num4.setEnabled(true);
???num5.setEnabled(true);
???num6.setEnabled(true);
???num7.setEnabled(true);
???num8.setEnabled(false);
???num9.setEnabled(false);
??}
??if(temp==two)
??{
???String bin=text.getText();
???int intbin=Integer.parseInt(bin,jin);
???text.setText(convert.decBin(intbin));
???jin=2;
???
???aa.setEnabled(false);
???bb.setEnabled(false);
???cc.setEnabled(false);
???dd.setEnabled(false);
???ee.setEnabled(false);
???ff.setEnabled(false);
???num2.setEnabled(false);
???num3.setEnabled(false);
???num4.setEnabled(false);
???num5.setEnabled(false);
???num6.setEnabled(false);
???num7.setEnabled(false);
???num8.setEnabled(false);
???num9.setEnabled(false);
??}
??if(temp==ten)
??{
???String dec=text.getText();
???int intdec=Integer.parseInt(dec,jin);
??//?text.setText(convert.decDec(intdec));? //本句會把123變成321
???text.setText(intdec+"");
???jin=10;
???aa.setEnabled(false);
???bb.setEnabled(false);
???cc.setEnabled(false);
???dd.setEnabled(false);
???ee.setEnabled(false);
???ff.setEnabled(false);
???num2.setEnabled(true);
???num3.setEnabled(true);
???num4.setEnabled(true);
???num5.setEnabled(true);
???num6.setEnabled(true);
???num7.setEnabled(true);
???num8.setEnabled(true);
???num9.setEnabled(true);
??}
??}
??catch(Exception ee)
??{
???System.out.println("轉換出錯,可能你沒有輸入任何字符");
???text.setText("轉換出錯");
???clear=false;
??}
??
??if(temp==backspace)
??{//退格
??String s = text.getText();
??text.setText("");
??for (int i = 0; i < s.length() - 1; i++)
??{
??char a = s.charAt(i);
??text.setText(text.getText() + a);
??}
??}
??
??if (temp==ce)
??{
???text.setText("0.");
???clear=true;
???first=1;
??}
??if (temp==c)
??{
???text.setText("0.");???;
???clear=true;
???first=1;
??}
??
??if(temp==num0)
???{ ?
????if(clear==false)//判斷是否點擊了符號位
????text.setText("");
????text.setText(text.getText()+"0");
???}
??
??if(temp==num1)
???{ ???
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"1");
????clear=true;//第二次不在清空(前二句)
???}
??
??if(temp==num2)
???{ ???
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"2");
????clear=true;
???}
??
??if(temp==num3)
???{ ???
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"3");
????clear=true;
???}
??
??if(temp==num4)
???{ ???
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"4");
????clear=true;
???}
??
??if(temp==num5)
???{
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"5");
????clear=true;
???}
??
??if(temp==num6)
???{
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"6");
????clear=true;
???}
??if(temp==num7)
???{
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"7");
????clear=true;
???}
??
??if(temp==num8)
???{
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"8");
????clear=true;
???}
??
??if(temp==num9)
???{
????if(clear==false)
????text.setText("");
????text.setText(text.getText()+"9");
????clear=true;
???}
???if(temp==aa)
???{
????text.setText(text.getText()+"A");
???}
??if(temp==bb)
???{
????text.setText(text.getText()+"B");
???}
??
??if(temp==cc)
???{
????text.setText(text.getText()+"C");
???}
??
??if(temp==dd)
???{
????text.setText(text.getText()+"D");
???}
??
??if(temp==ee)
???{
????text.setText(text.getText()+"E");
???}?
??if(temp==ff)
???{
????text.setText(text.getText()+"F");
???}
???if(temp==dian)
???{
????clickable=true;
????for (int i = 0; i < text.getText().length(); i++)
???if ('.' == text.getText().charAt(i))
???{
???clickable=false;
???break;
???} //第一層判斷是否里面含有小數點;
????
????if(clickable==true)//第二壇判斷
????text.setText(text.getText()+".");
????
???}
???
??try
??{?
???if(temp==jia)
???{//加法
????qian=Double.parseDouble(text.getText());
????fuhao="+";
????clear=false;
???}
???if(temp==jian)
???{
????qian=Double.parseDouble(text.getText());
????fuhao="-";
????clear=false;
????;
????
???}
???if(temp==cheng)
???{
????qian=Double.parseDouble(text.getText());
????fuhao="*";
????clear=false;
???? ???
???}
???if(temp==chu)
???{
????qian=Double.parseDouble(text.getText());
????fuhao="/";
????clear=false;
???? ???
???}
???if(temp==deng)
???{
????double ss=Double.parseDouble(text.getText());
????text.setText("");
????if(fuhao=="+")
????text.setText(qian+ss+"");
????if(fuhao=="-")
????text.setText(qian-ss+"");
????if(fuhao=="*")
????text.setText(qian*ss+"");
????if(fuhao=="/")
????text.setText(qian/ss+"");
????clear=false;//要清空前一次的數據
????;
????
???}
???
???if(temp==kai)
???{ ???
??String s = text.getText();
??if (s.charAt(0) == '-')
??{
???text.setText("負數不能開根號");
??}
??else
??text.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(text.getText()))));
??clear=false;
??}
??
??if(temp==diao)
??{
???
???if (text.getText().charAt(0) == '0'&&text.getText().length() == 1)
??? {
????text.setText("除數不能為零");
??? }
??else
??{
??boolean isDec = true;
???int i, j, k;
???String s = Double.toString(1 / Double.parseDouble(text.getText()));
???for (i = 0; i < s.length(); i++)
???if (s.charAt(i) == '.')
???break;
???for (j = i + 1; j < s.length(); j++)
???if (s.charAt(j) != '0')
???{
???isDec = false;
???break;
???}
???if (isDec == true)
???{
???String stemp = "";
???for (k = 0; k < i; k++)
????stemp += s.charAt(k);
????text.setText(stemp);
???}
???else
???text.setText(s);
???}
?
????clear=false;
??}
??if(temp==qiuyi)
??{
???text.setText("0");
???clear=false;
??}
??if (temp == fu)
??{ //導師,此方法參考書中例子
???boolean isNumber = true;
???String s = text.getText();
???for (int i = 0; i < s.length(); i++)
???if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' ||
???s.charAt(i) == '-'))
??????? {
?????isNumber = false;
?????break;
?????}
???if (isNumber == true)
??? {
???//如果當前字符串首字母有'-'號,代表現在是個負數,再按下時,則將首符號去掉
?????if (s.charAt(0) == '-')
?????{
?????text.setText("");
?????for (int i = 1; i < s.length(); i++)
???????? {
???????char a = s.charAt(i);
???????text.setText(text.getText() + a);
???????? ??}
?????}
??????//如果當前字符串第一個字符不是符號,則添加一個符號在首字母處
???else
???text.setText('-' + s);
???}
??}
??
?}
?catch(Exception eee)
?{
??System.out.println("運算時,首先輸入數字或字符");
??text.setText("運算出錯");
??clear=false;
?}
??
??
??
?}
?
?class WindowDestroyer extends WindowAdapter
?{//退出窗口動作
??public void windowClosing(WindowEvent e)
??{
??System.exit(0);
??}
?}
?
class objConversion
{//導師,本進制類參考了CSMD類轉換例子
?
?public void objConversion ()
?{
?}
?
?public String decDec (int decNum)
?{//10
??
??String strDecNum = Integer.toString(decNum);
??
??for (int i = strDecNum.length(); i < 3; i++)
??{
???strDecNum = "0" + strDecNum;
??}
??
?//?return strDecNum;
??return invert (strDecNum, 5);
??
?}
?
?public String decHex (int decNum)
?{//10 to 16
??
??String strHexNum = "";
??int currentNum = 0;
??
??while (decNum != 0)
??{
???
???if (decNum > 15)
???{
????
????currentNum = decNum % 16;
????decNum /= 16;
????
???}
???else
???{
????
????currentNum = decNum;
????decNum = 0;
????
???}
???
???switch (currentNum)
???{
????
????case 15:?strHexNum += "F";
???????break;
????case 14:?strHexNum += "E";
???????break;
????case 13:?strHexNum += "D";
???????break;
????case 12:?strHexNum += "C";
???????break;
????case 11:?strHexNum += "B";
???????break;
????case 10:?strHexNum += "A";
???????break;
????default:?strHexNum += Integer.toString(currentNum);
???????break;
???????
???}
???
??}
???
??return invert (strHexNum, 2);
???
?}
??
?public String decOct (int decNum)
?{//10 to 8
??
??String strOctNum = "";
??
??while (decNum != 0)
??{
???
???if (decNum > 7)
???{
????
????strOctNum += Integer.toString(decNum % 8);
????decNum /= 8;
????
???}
???else
???{
????
????strOctNum += Integer.toString(decNum);
????decNum = 0;
????
???}
???
??}
??
??return invert (strOctNum, 3);
??
?}
?
?public String decBin (int decNum)
?{//10 to 2
??
??String strBinNum = "";
??
??while (decNum != 0)
??{
???
???if (decNum > 1)
???{
????
????strBinNum += Integer.toString(decNum % 2);
????decNum /= 2;
????
???}
???else
???{
????
????strBinNum += Integer.toString(decNum);
????decNum = 0;
????
???}
???
??}
??
??return invert (strBinNum, 8);
??
?}
?
?private String invert (String strNum, int minLength) //轉換長度
?{??
??
??String answer = "";
??int length = strNum.length();
??
??if (length < minLength)
??{
???
???for (int padding = (minLength - length); padding > 0; padding--)
???{
????answer += "0";
???}
???
??}
??
??for (int i = length; i > 0; i--)
??{
???answer += strNum.charAt (i - 1);
??}
??
??return answer;
??
?}
?
}
?
?
?public static void main(String arg[])//產生窗口
?{
??calculator win = new calculator();?
??win.setVisible(true);
?}
}
posted on 2006-11-14 13:35
楊彩 閱讀(18022)
評論(9) 編輯 收藏 所屬分類:
我的Java程序