一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java swing實現的計算器功能完整實例

Java swing實現的計算器功能完整實例

2021-03-04 10:11xxiaowen JAVA教程

這篇文章主要介紹了Java swing實現的計算器功能,結合完整實例形式分析了java基于swing組件實現計算器布局與運算功能的具體操作技巧,需要的朋友可以參考下

本文實例講述了Java swing實現的計算器功能。分享給大家供大家參考,具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
package awtDemo;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
public class Calculator {
  String str1 = "0"; // 運算數1 初值一定為0 為了程序的安全
  String str2 = "0"; // 運算數2
  String signal = "+"; // 運算符
  String result = "";// 結果
  // 狀態開關
  int k1 = 1;// 開關1 用于選擇輸入方向 將要寫入str2或 str2
  int k2 = 1;// 開關2 符號鍵 次數 k2>1說明進行的是2+3-9+8 這樣的多符號運算
  int k3 = 1;// 開關3 str1 是否可以被清0 ==1時可以 !=1時不能被清0
  int k4 = 1;// 開關4 str2 同上
  int k5 = 1;// 開關5 控制小數點可否被錄入 ==1時可以 !=1 輸入的小數點被丟掉
  JButton store; // 寄存器 記錄 是否連續按下符號鍵
  @SuppressWarnings("rawtypes")
  Vector vt = new Vector(20, 10);
  JFrame frame = new JFrame("服務器之家 - 計算器");
  JTextField result_TextField = new JTextField(result, 20);// 20列
  JButton clear_Button = new JButton("清除");
  JButton button0 = new JButton("0");
  JButton button1 = new JButton("1");
  JButton button2 = new JButton("2");
  JButton button3 = new JButton("3");
  JButton button4 = new JButton("4");
  JButton button5 = new JButton("5");
  JButton button6 = new JButton("6");
  JButton button7 = new JButton("7");
  JButton button8 = new JButton("8");
  JButton button9 = new JButton("9");
  JButton button_Dian = new JButton(".");
  JButton button_jia = new JButton("+");
  JButton button_jian = new JButton("-");
  JButton button_cheng = new JButton("*");
  JButton button_chu = new JButton("/");
  JButton button_dy = new JButton("=");
  Calculator() {
    button0.setMnemonic(KeyEvent.VK_0);// 等效鍵
    // 其它 等效鍵 略,
    result_TextField.setHorizontalAlignment(JTextField.RIGHT);// 文本框 右對齊
    JPanel pan = new JPanel();
    pan.setLayout(new GridLayout(4, 4, 5, 5));// 四行四列 邊距為5像素
    pan.add(button7);
    pan.add(button8);
    pan.add(button9);
    pan.add(button_chu);
    pan.add(button4);
    pan.add(button5);
    pan.add(button6);
    pan.add(button_cheng);
    pan.add(button1);
    pan.add(button2);
    pan.add(button3);
    pan.add(button_jian);
    pan.add(button0);
    pan.add(button_Dian);
    pan.add(button_dy);
    pan.add(button_jia);
    pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// pan對象的邊距
    JPanel pan2 = new JPanel();
    pan2.setLayout(new BorderLayout());
    pan2.add(result_TextField, BorderLayout.WEST);
    pan2.add(clear_Button, BorderLayout.EAST);
    frame.setLocation(300, 200); // 主窗口 出現在位置
    frame.setResizable(false); // 不能調大小
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(pan2, BorderLayout.NORTH);
    frame.getContentPane().add(pan, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
    // 事件處理 程 序
    // 數 字 鍵
    class Listener implements ActionListener {
      @SuppressWarnings("unchecked")
      public void actionPerformed(ActionEvent e) {
        String ss = ((JButton) e.getSource()).getText();
        store = (JButton) e.getSource();
        vt.add(store);
        if (k1 == 1) {
          if (k3 == 1) {
            str1 = "";
            k5 = 1;// 還原開關k5狀態
          }
          str1 = str1 + ss;
          k3 = k3 + 1;
          result_TextField.setText(str1);// 顯示
        } else if (k1 == 2) {
          if (k4 == 1) {
            str2 = "";
            k5 = 1; // 還原開關k5狀態
          }
          str2 = str2 + ss;
          k4 = k4 + 1;
          result_TextField.setText(str2);
        }
      }
    }
    // 符 號
    class Listener_signal implements ActionListener {
      @SuppressWarnings("unchecked")
      public void actionPerformed(ActionEvent e) {
        String ss2 = ((JButton) e.getSource()).getText();
        store = (JButton) e.getSource();
        vt.add(store);
        if (k2 == 1) {
          k1 = 2;// 開關 k1 為1時,向數1寫 為2時,向數2寫
          k5 = 1;
          signal = ss2;
          k2 = k2 + 1;// 按符號鍵的次數
        } else {
          int a = vt.size();
          JButton c = (JButton) vt.get(a - 2);
          if (!(c.getText().equals("+"))
              && !(c.getText().equals("-"))
              && !(c.getText().equals("*"))
              && !(c.getText().equals("/")))
          {
            cal();
            str1 = result;
            k1 = 2;// 開關 k1 為1時,向數1寫 為2時,向數2寫
            k5 = 1;
            k4 = 1;
            signal = ss2;
          }
          k2 = k2 + 1;
        }
      }
    }
    // 清除
    class Listener_clear implements ActionListener {
      @SuppressWarnings("unchecked")
      public void actionPerformed(ActionEvent e) {
        store = (JButton) e.getSource();
        vt.add(store);
        k5 = 1;
        k2 = 1;
        k1 = 1;
        k3 = 1;
        k4 = 1;
        str1 = "0";
        str2 = "0";
        signal = "";
        result = "";
        result_TextField.setText(result);
        vt.clear();
      }
    }
    // 等 于
    class Listener_dy implements ActionListener {
      @SuppressWarnings("unchecked")
      public void actionPerformed(ActionEvent e) {
        store = (JButton) e.getSource();
        vt.add(store);
        cal();
        k1 = 1; // 還原開關k1狀態
        // str1=result;
        k2 = 1;
        k3 = 1;// 還原開關k3狀態
        k4 = 1; // 還原開關k4狀態
        str1 = result; // 為7+5=12 +5=17 這種計算做準備
      }
    }
    // 小數點
    class Listener_xiaos implements ActionListener {
      @SuppressWarnings("unchecked")
      public void actionPerformed(ActionEvent e) {
        store = (JButton) e.getSource();
        vt.add(store);
        if (k5 == 1) {
          String ss2 = ((JButton) e.getSource()).getText();
          if (k1 == 1) {
            if (k3 == 1) {
              str1 = "";
              k5 = 1; // 還原開關k5狀態
            }
            str1 = str1 + ss2;
            k3 = k3 + 1;
            result_TextField.setText(str1);// 顯示
          } else if (k1 == 2) {
            if (k4 == 1) {
              str2 = "";
              k5 = 1; // 還原開關k5狀態
            }
            str2 = str2 + ss2;
            k4 = k4 + 1;
            result_TextField.setText(str2);
          }
        }
        k5 = k5 + 1;
      }
    }
    // 注冊 監聽器
    Listener_dy jt_dy = new Listener_dy();
    Listener jt = new Listener();// 臨聽數字鍵
    Listener_signal jt_signal = new Listener_signal();// 臨 聽符 號鍵
    Listener_clear jt_c = new Listener_clear(); // 清除鍵
    Listener_xiaos jt_xs = new Listener_xiaos();// 小數點 鍵
    button7.addActionListener(jt);
    button8.addActionListener(jt);
    button9.addActionListener(jt);
    button_chu.addActionListener(jt_signal);
    button4.addActionListener(jt);
    button5.addActionListener(jt);
    button6.addActionListener(jt);
    button_cheng.addActionListener(jt_signal);
    button1.addActionListener(jt);
    button2.addActionListener(jt);
    button3.addActionListener(jt);
    button_jian.addActionListener(jt_signal);
    button0.addActionListener(jt);
    button_Dian.addActionListener(jt_xs);
    button_dy.addActionListener(jt_dy);
    button_jia.addActionListener(jt_signal);
    clear_Button.addActionListener(jt_c);
    // 關閉事件處理程序
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
  // 計 算
  public void cal() {
    double a2;// 運算數1
    double b2;// 運算數2
    String c = signal;// 運算符
    double result2 = 0;// 結果
    if (c.equals("")) {
      result_TextField.setText("請輸入運算符");
    } else {
      if (str1.equals(".")) // 字符串 "." 轉換成double型數據時 會出錯 所以手工轉
        str1 = "0.0";
      if (str2.equals("."))
        str2 = "0.0";
      a2 = Double.valueOf(str1).doubleValue();
      b2 = Double.valueOf(str2).doubleValue();
      if (c.equals("+")) {
        result2 = a2 + b2;
      }
      if (c.equals("-")) {
        result2 = a2 - b2;
      }
      if (c.equals("*")) {
        result2 = a2 * b2;
      }
      if (c.equals("/")) {
        if (b2 == 0) {
          result2 = 0;
        } else {
          result2 = a2 / b2;
        }
      }
      result = ((new Double(result2)).toString());
      result_TextField.setText(result);
    }
  }
  @SuppressWarnings("unused")
  public static void main(String[] args) {
    // 界面風格,可以去除
  try {
          UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (Exception e) {
      e.printStackTrace();
    }
    Calculator cal = new Calculator();
  }
}

運行效果:

Java swing實現的計算器功能完整實例

希望本文所述對大家java程序設計有所幫助。

原文鏈接:http://blog.csdn.net/wenzhilanyu2012/article/details/44888621

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 鸭子玩富婆流白浆视频 | 日本视频在线免费观看 | 亚洲另类第一页 | 亚洲精品久久久久69影院 | 成年视频在线播放 | 我的家教老师 | 色老板在线 | 亚洲白拍 | 欧美综合亚洲图片综合区 | crdy在线看亚洲 | 天天躁夜夜躁很很躁 | 欧美整片完整片视频在线 | 日韩在线视频免费观看 | 欧美贵妇videos办公室360 | 国产精品嫩草影院一二三区入口 | 九九九国产在线 | 教室里老师好紧h | 欧美高清3dfreexxxx性 | 91制片厂制作果冻传媒八夷 | 沉沦艳妇杨幂肉体小说 | 四虎综合九九色九九综合色 | 污小说免费 | 国产精品永久免费视频观看 | 国内精品久久久久影院中国 | 国产美女久久久久 | 乌克兰一级毛片9一18 | 黄瓜视频黄版 | 性free非洲老妇 | 4444亚洲国产成人精品 | 免费国产一级观看完整版 | 嫩草影院精品视频在线观看 | 欧美综合精品一区二区三区 | meyd–456佐山爱在线播放 | 久久精品国产亚洲AV麻豆欧美玲 | 亚洲狠狠网站色噜噜 | 美女口述又粗又大感觉 | 2020年精品国产午夜福利在线 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 欧美国产精品 | 亚洲高清国产拍精品动图 | 91调教|