當前位置:編程學習大全網 - 編程語言 - java加減乘除計算器界面編程?

java加減乘除計算器界面編程?

以前學習的時候寫過,聽那些在工作崗位上的人說JFrame框架在企業中基本不用,所以也就沒怎麽深入研究了,妳要的話我可以給妳,能完善壹下最好,完善不了的話就以後再說吧

package test;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Z extends JFrame implements ActionListener, FocusListener {

private String[] total = { "1", "2", "3", "+", "4", "5", "6", "-", "7", "8", "9", "*", "0", ".", "=", "/" }; // 總數組

private String[] other = { "clear", "delete" }; // 其它功能數組

private String[] symbol = { "+", "-", "*", "/" }; // 符號數組

private String multinumber = "0", operator1 = "", exists = "", operator2 = null, s = "";

// multinumber(多位數) operator1(運算符) exists(存在的)

private double d1, d2 = 0;

private int Count = 0;

JPanel jptotal = new JPanel(); // 總面板

JTextField jtexternal = new JTextField("0"); // 外部文本框

JTextField jtinside = new JTextField(); // 內部文本框

JPanel jptop1 = new JPanel(); // 頂部面板1

JPanel jptop2 = new JPanel(); // 頂部面板2

JPanel jpmiddle = new JPanel(); // 中部面板

public Z() {

jptotal.setLayout(new BorderLayout());

// 使用邊界布局管理器

jptop1.setLayout(new GridLayout(2, 0));

jptop1.add(jtexternal);

jptop2.setLayout(new GridLayout(0, 2));

for (int i = 0; i < other.length; i++) {

JButton jbi = new JButton("" + other[i]);

jbi.setSize(100, 10);

jptop2.add(jbi);

jbi.addActionListener(this);

}

jpmiddle.setLayout(new GridLayout(4, 0));

for (int i = 0; i < total.length; i++) {

JButton jbi = new JButton("" + total[i]);

jpmiddle.add(jbi);

jbi.addActionListener(this);

}

jtexternal.addFocusListener(this);

jtexternal.add(jtinside);

jtinside.addFocusListener(this);

// 上面三行代碼的作用是讓文本框不可被選中

jptop1.add(jptop2);

jptotal.add(jptop1, "North");

// 以jp1為壹個整體,讓jp1裏面的內容從最上面開始填充

jptotal.add(jpmiddle);

add(jptotal);

setVisible(true);

setSize(500, 500);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

// ctrl+/ :註釋

public void actionPerformed(ActionEvent e) throws ArithmeticException {

try {

String inputing = e.getActionCommand();

// 表示獲取當前輸入的內容

if (inputing.equals(".")) {

Count++;

}

exists = jtexternal.getText();

if (operator2 != null) {

int k = 0;

for (int i = 0; i < symbol.length; i++) {

if (operator2.equals(symbol[i])) {

k = k + 1;

}

if (inputing.equals(symbol[i])) {

k = k + 1;

}

if (k == 2) {

jtexternal.setText(exists.substring(0, exists.length() - 1) + inputing);

operator1 = inputing;

return;

}

// 實現四則運算符不可同時存在,新輸入的替換舊的

if (operator2.equals(symbol[i]) && inputing.equals(".")) {

return;

}

// 實現四則運算符和點不可挨著出現(點後面可以出現四則運算符,點前面不可出現)

}

}

if (exists.equals("0")) {

if (inputing.equals(".") || (inputing.equals("+")) || (inputing.equals("-")) || (inputing.equals("*"))

|| (inputing.equals("/"))) {

jtexternal.setText("0" + inputing);

} else {

jtexternal.setText(inputing);

}

} else {

jtexternal.setText(exists + inputing);

}

// 實現如果0前面沒有非0數字的話,那麽無論輸入多少次0,都只顯示壹個0,如果輸入其它數字,0將會被替換

if ((d1 == 0.0 || d2 == 0.0) && inputing.equals("=") && !exists.substring(0, 1).equals("0")) {

return;

}

// 實現如果文本框內存在數字,那麽輸入等號,將打印其本身

if (inputing.equals("clear")) {

multinumber = "0";

exists = "";

operator1 = "";

jtexternal.setText("0");

operator2 = null;

d2 = 0;

s = "";

Count = 0;

d1 = 0.0;

// 實現,當點擊clear時,文本框內將被清空至0,所有數據都將還原至初始狀態

} else if (inputing.equals("delete")) {

if (exists.length() <= 1 || s.equals("=")) {

jtexternal.setText("0");

multinumber = "0";

exists = "";

operator1 = "";

operator2 = null;

d2 = 0;

s = "";

Count = 0;

d1 = 0;

// 實現,按delete刪除剛輸入的內容,如果將最後壹個數字刪除,那麽效果同按clear

} else {

if (inputing.equals("+") || inputing.equals("-") || inputing.equals("*") || inputing.equals("/")) {

Count = 1;

}

jtexternal.setText(exists.substring(0, exists.length() - 1));

// 將operator2存儲上壹次值

operator2 = exists.substring(exists.length() - 2, exists.length() - 1);

/*

* 實現如果四則運算符後面有數字的話

* 那麽如果此時按刪除鍵

* 刪除之後如果新輸入的還是四則運算符話

* 那麽將會將原來的四則運算符替換成新輸入的

*/

}

} else if (!inputing.equals("+") && !inputing.equals("-") && !inputing.equals("*") && !inputing.equals("/")

&& !inputing.equals("=")) {

// 判斷輸入是否為數字

if (s.equals("=")) {

if (exists.equals("除數不能為0") || new Double(exists) == d1) {

if (inputing.equals(".")) {

jtexternal.setText("0" + inputing);

} else {

jtexternal.setText(inputing);

}

}

s = "";

}

// 實現壹次計算完成之後,可以進行新的運算

if (multinumber == null) { // 多位數計算

multinumber = inputing;

} else {

multinumber += inputing;

}

d1 = new Double(multinumber);

if (operator1.equals("+")) { // 進行四則運算

if (d2 == 0) {

if (operator1.equals("*") || operator1.equals("/")) {

d2 = 1;

}

}

// 實現,當四則運算符後面沒有數字時,那麽輸入等號後結果將為符號前面的結果,如果符號前面只有壹個數字,那麽將打印自身

d1 = d1 + d2;

} else if (operator1.equals("-")) {

d1 = d2 - d1;

} else if (operator1.equals("*")) {

d1 = d1 * d2;

} else if (operator1.equals("/")) {

d1 = d2 / d1;

}

// 利用臨時變量f2,實現四則運算

operator2 = inputing;

} else if (!inputing.equals("=")) { // [四則運算符] 輸入等號後繼續進行計算

multinumber = "0";

operator1 = inputing;

d2 = d1;

operator2 = inputing;

s = "";

Count = 0;

// 實現小數運算

} else { // 就是 [=] 得出最終結果

jtexternal.setText("" + d1);

Count = 0;

s = "=";

multinumber = "0";

if (operator2.equals("0") && "/".equals(operator1)) {

operator2 = null;

d1 = 0;// 將非法運算值替換成正確值

throw new ArithmeticException();// 指定拋出異常的條件

//賦值計算不拋算數異常,如果想讓其拋出,必須指定條件重新拋出異常

} else {

operator1 = inputing;

operator2 = null;

d2 = 0;

} // 計算結果

if (inputing.equals("=") && (d1 == 0.0 || d2 == 0.0)) {

return;

}

// 實現等號不可重復輸入

}

} catch (ArithmeticException e1) {

jtexternal.setText("除數不能為0");

// 指定拋出異常內容

}

}

public static void main(String[] args) {

new Z();

}

public void focusGained(FocusEvent e) {

jtinside.requestFocus();

// 讓焦點聚焦到內部文本框,實現外部文本框的不可聚焦功能

}

public void focusLost(FocusEvent e) {

}

}

/*

* 目前delete刪除輸入值之後讓其它值還原功能未實現,等以後再進行改進 舉個例子:比如我要計算1+1,但是在輸入等號的時候,我想換成別的

* 比如我想換成1-1,我按delete將1和加號刪除,換成1-1 但是結果卻不是0 又或者我換成11+1,但是結果卻不是12

* 又或者當我輸入11時,我不小心多輸入了壹個數字,這時候再進行運算,結果就不是我想要的了 ...

*/

  • 上一篇:疫情心理健康主題班會教案
  • 下一篇:微服務架構實踐 - 妳只懂docker與spring boot就夠了嗎?
  • copyright 2024編程學習大全網