文章出處

寫的一個小計算器,留著以后看吧。
  1 import java.awt.BorderLayout;
  2 import java.awt.Button;
  3 import java.awt.Color;
  4 import java.awt.Dimension;
  5 import java.awt.Frame;
  6 import java.awt.GridLayout;
  7 import java.awt.Panel;
  8 import java.awt.TextField;
  9 import java.awt.event.ActionEvent;
 10 import java.awt.event.ActionListener;
 11 import java.awt.event.MouseEvent;
 12 import java.awt.event.MouseListener;
 13 
 14 public class Calculator extends Frame implements ActionListener,MouseListener {
 15      /**
 16       * button上的名字
 17       */
 18      private final String KEY[] = {"7","8" ,"9" ,"/" ,"4" ,"5" ,"6" ,"*" ,"1" ,"2" ,"3" ,"-" ,"0" ,"." ,"C" ,"+" ,"+/-" ,"%" ,"←" ,"=" };
 19      /**
 20       * 創建一個button數組
 21       */
 22      private Button key[] = new Button[ KEY. length];
 23      
 24      /**
 25       * 計算結果的文本框
 26       */
 27      private TextField tf = new TextField( "0");
 28      /** 標志用戶按的是否是整個表達式的第一個數字,或者是運算符后的第一個數字*/
 29      private boolean firstNum = true;
 30      /**計算的中間結果。*/
 31      private double resultNum = 0.0;
 32      /**當前運算的運算符*/
 33      private String operator = "=";
 34      /**操作是否合法*/
 35      private boolean operateValidFlag = true;
 36      
 37 
 38      
 39      /**
 40       * 創建布局以及添加組件
 41       */
 42      public void additionLayout(){
 43            //構造一個有標題的構造方法
 44           Frame f = new Frame( "計算器");
 45            //定義一個窗口事件監聽器用于關閉窗口
 46           f.addWindowListener( new MyWindowListener());
 47            //放button的面板
 48           Panel p = new Panel();
 49           Panel p2 = new Panel();
 50            //定義panel的布局方式
 51           p.setLayout( new GridLayout(5,4,5,5));
 52           p2.setLayout( new GridLayout(1,1,5,5));
 53            //使文本框不可編輯
 54            tf.setEditable( false);
 55           
 56            //用for循環創建button并加入到面板中
 57            for( int i = 0;i< KEY. length;i++){
 58                key[i] = new Button( KEY[i]);
 59                key[i].setBackground(Color. cyan);
 60               p.add( key[i]);
 61           }
 62            //為所有的button注冊事件監聽器
 63            for ( int i = 0; i < KEY. length; i++) {
 64                key[i].addActionListener( this);
 65                key[i].addMouseListener( this);
 66           }
 67            tf.setPreferredSize( new Dimension(20,30));
 68           p2.add( tf);
 69           f.add(p,BorderLayout. CENTER);
 70           f.add(p2,BorderLayout. NORTH);
 71           f.setSize(333,235);  //設置窗口大小
 72           f.setLocation(550, 200); //設置窗口的初始位置
 73           f.setResizable( false);   //不可改變窗口大小
 74           f.setVisible( true);   //設置窗口可見
 75      }
 76      
 77      /**
 78       * 監聽器處理事件
 79       */
 80      @Override
 81      public void actionPerformed(ActionEvent e) {
 82           String label = e.getActionCommand();
 83            if( "0123456789.".indexOf(label)>=0){
 84                //用戶按了數字鍵
 85               handleNumber(label);
 86           } else if(label.equals( KEY[14])){
 87                //用戶按了C鍵
 88               handleC();
 89           } else if (label.equals( KEY[18])) {
 90                // 用戶按了"Backspace"鍵
 91               handleBackspace();
 92           } else{
 93                //用戶按了運算符鍵
 94               handleOperator(label);
 95           }
 96      }
 97      /**
 98       * 處理數字鍵與小數點被按下的事件
 99       *
100       */
101      private void handleNumber(String num){
102            if( firstNum){
103                //輸入第一個數字
104                tf.setText(num);
105           } else if((num.equals( ".")) && (tf.getText().indexOf( ".") < 0)){
106                // 輸入的是小數點,并且之前沒有小數點,則將小數點附在結果文本框的后面
107                tf.setText( tf.getText() + ".");
108           } else if(!num.equals( ".")){
109                // 如果輸入的不是小數點,則將數字附在結果文本框的后面
110                tf.setText( tf.getText() + num);
111           }
112           
113            firstNum = false;
114      }
115      
116      /**
117       * 處理C鍵被按下的事件
118       */
119      private void handleC(){
120            // 初始化計算器的各種值
121                     tf.setText( "0");
122                     firstNum = true;
123                     operator = "=";
124      }
125      
126      /**
127       * 處理Backspace鍵被按下的事件
128       */
129      private void handleBackspace() {
130           String text = tf.getText();
131            int i = text.length();
132            if (i > 0) {
133                // 退格,將文本最后一個字符去掉
134               text = text.substring(0, i - 1);
135                if (text.length() == 0) {
136                     // 如果文本沒有了內容,則初始化計算器的各種值
137                     tf.setText( "0");
138                     firstNum = true;
139                     operator = "=";
140               } else {
141                     // 顯示新的文本
142                     tf.setText(text);
143               }
144           }
145      }
146      
147      /**
148       * 處理運算符鍵被按下的事件
149       */
150      private void handleOperator(String oper){
151            if ( operator.equals( "/")) {
152                // 除法運算
153                // 如果當前結果文本框中的值等于0
154                if (getNumberFromText() == 0.0) {
155                     // 操作不合法
156                     operateValidFlag = false;
157                     tf.setText( "除數不能為零" );
158               } else {
159                     resultNum /= getNumberFromText();
160               }
161           } else if ( operator.equals( "+")) {
162                // 加法運算
163                resultNum += getNumberFromText();
164           } else if ( operator.equals( "-")) {
165                // 減法運算
166                resultNum -= getNumberFromText();
167           } else if ( operator.equals( "*")) {
168                // 乘法運算
169                resultNum *= getNumberFromText();
170           } else if ( operator.equals( "=")) {
171                // 賦值運算
172                resultNum = getNumberFromText();
173           } else if ( operator.equals( "+/-")) {
174                // 正數負數運算
175                resultNum = resultNum * (-1);
176           } else if ( operator.equals( "%")) {
177                // 百分號運算,除以100
178                resultNum = resultNum / 100;
179           }
180            if ( operateValidFlag) {
181                // 雙精度浮點數的運算
182                long t1;
183                double t2;
184               t1 = ( long) resultNum;
185               t2 = resultNum - t1;
186                if (t2 == 0) {
187                     tf.setText(String. valueOf(t1));
188               } else {
189                     tf.setText(String. valueOf(resultNum));
190               }
191           }
192            // 運算符等于用戶按的按鈕
193            operator = oper;
194            firstNum = true;
195            operateValidFlag = true;
196      }
197      
198      /**
199       * 從文本框中獲取數字
200       */
201      private double getNumberFromText() {
202            double result = 0;
203            try {               //異常捕獲
204               result = Double.valueOf(tf.getText()).doubleValue();
205           } catch (NumberFormatException e) {
206           }
207            return result;
208      }
209 
210      //鼠標進入按鈕時變為黃色
211      @Override
212      public void mouseEntered(MouseEvent e) {
213           Button b = (Button)e.getSource();
214           b.setBackground(Color. yellow);
215      }
216      //鼠標離開按鈕時恢復顏色
217      @Override
218      public void mouseExited(MouseEvent e) {
219           Button b = (Button)e.getSource();
220           b.setBackground(Color. CYAN);
221      }
222      //鼠標在按鈕上按下時變為紅色
223      @Override
224      public void mousePressed(MouseEvent e) {
225           Button b = (Button)e.getSource();
226           b.setBackground(Color. red);
227      }
228      //鼠標在按鈕上釋放時恢復顏色
229      @Override
230      public void mouseReleased(MouseEvent e) {
231           Button b = (Button)e.getSource();
232           b.setBackground(Color. CYAN);
233           
234           
235      }
236 
237      @Override
238      public void mouseClicked(MouseEvent arg0) {
239            // TODO Auto-generated method stub
240           
241      }
242      
243      
244 
245 
246 /**
247  * 測試類
248  *
249  */
250      public static void main(String[] args) {
251           Calculator c = new Calculator();
252           c.additionLayout();
253      }
254      
255 }
Calculator

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()