java計算器設計
『壹』 用java編寫了一個模擬計算器的界面設計,怎麼實現運算功能呢
view sourceprint?
import java.awt.BorderLayout;    
import java.awt.Color;    
import java.awt.GridLayout;    
import java.awt.event.ActionEvent;    
import java.awt.event.ActionListener;    
     
import javax.swing.JButton;    
import javax.swing.JFrame;    
import javax.swing.JPanel;    
import javax.swing.JTextField;    
     
/**    
 * 一個計算器,與Windows附件自帶計算器的標准版功能、界面相仿。 但還不支持鍵盤操作。    
 */    
public class Calculator extends JFrame implements ActionListener {    
    /** 計算器上的鍵的顯示名字 */    
    private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",    
            "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };    
    /** 計算器上的功能鍵的顯示名字 */    
    private final String[] COMMAND = { "Backspace", "CE", "C" };    
    /** 計算器左邊的M的顯示名字 */    
    private final String[] M = { " ", "MC", "MR", "MS", "M+" };    
    /** 計算器上鍵的按鈕 */    
    private JButton keys[] = new JButton[KEYS.length];    
    /** 計算器上的功能鍵的按鈕 */    
    private JButton commands[] = new JButton[COMMAND.length];    
    /** 計算器左邊的M的按鈕 */    
    private JButton m[] = new JButton[M.length];    
    /** 計算結果文本框 */    
    private JTextField resultText = new JTextField("0");    
     
    // 標志用戶按的是否是整個表達式的第一個數字,或者是運算符後的第一個數字    
    private boolean firstDigit = true;    
    // 計算的中間結果。    
    private double resultNum = 0.0;    
    // 當前運算的運算符    
    private String operator = "=";    
    // 操作是否合法    
    private boolean operateValidFlag = true;    
     
    /**    
     * 構造函數    
     */    
    public Calculator() {    
        super();    
        // 初始化計算器    
        init();    
        // 設置計算器的背景顏色    
        this.setBackground(Color.LIGHT_GRAY);    
        this.setTitle("計算器");    
        // 在屏幕(500, 300)坐標處顯示計算器    
        this.setLocation(500, 300);    
        // 不許修改計算器的大小    
        this.setResizable(false);    
        // 使計算器中各組件大小合適    
        this.pack();    
    }    
     
    /**    
     * 初始化計算器    
     */    
    private void init() {    
        // 文本框中的內容採用右對齊方式    
        resultText.setHorizontalAlignment(JTextField.RIGHT);    
        // 不允許修改結果文本框    
        resultText.setEditable(false);    
        // 設置文本框背景顏色為白色    
        resultText.setBackground(Color.WHITE);    
     
        // 初始化計算器上鍵的按鈕,將鍵放在一個畫板內    
        JPanel calckeysPanel = new JPanel();    
        // 用網格布局器,4行,5列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素    
        calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));    
        for (int i = 0; i < KEYS.length; i++) {    
            keys[i] = new JButton(KEYS[i]);    
            calckeysPanel.add(keys[i]);    
            keys[i].setForeground(Color.blue);    
        }    
        // 運算符鍵用紅色標示,其他鍵用藍色表示    
        keys[3].setForeground(Color.red);    
        keys[8].setForeground(Color.red);    
        keys[13].setForeground(Color.red);    
        keys[18].setForeground(Color.red);    
        keys[19].setForeground(Color.red);    
     
        // 初始化功能鍵,都用紅色標示。將功能鍵放在一個畫板內    
        JPanel commandsPanel = new JPanel();    
        // 用網格布局器,1行,3列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素    
        commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));    
        for (int i = 0; i < COMMAND.length; i++) {    
            commands[i] = new JButton(COMMAND[i]);    
            commandsPanel.add(commands[i]);    
            commands[i].setForeground(Color.red);    
        }    
     
        // 初始化M鍵,用紅色標示,將M鍵放在一個畫板內    
        JPanel calmsPanel = new JPanel();    
        // 用網格布局管理器,5行,1列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素    
        calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));    
        for (int i = 0; i < M.length; i++) {    
            m[i] = new JButton(M[i]);    
            calmsPanel.add(m[i]);    
            m[i].setForeground(Color.red);    
        }    
     
        // 下面進行計算器的整體布局,將calckeys和command畫板放在計算器的中部,    
        // 將文本框放在北部,將calms畫板放在計算器的西部。    
     
        // 新建一個大的畫板,將上面建立的command和calckeys畫板放在該畫板內    
        JPanel panel1 = new JPanel();    
        // 畫板採用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素    
        panel1.setLayout(new BorderLayout(3, 3));    
        panel1.add("North", commandsPanel);    
        panel1.add("Center", calckeysPanel);    
     
        // 建立一個畫板放文本框    
        JPanel top = new JPanel();    
        top.setLayout(new BorderLayout());    
        top.add("Center", resultText);    
     
        // 整體布局    
        getContentPane().setLayout(new BorderLayout(3, 5));    
        getContentPane().add("North", top);    
        getContentPane().add("Center", panel1);    
        getContentPane().add("West", calmsPanel);    
        // 為各按鈕添加事件偵聽器    
        // 都使用同一個事件偵聽器,即本對象。本類的聲明中有implements ActionListener    
        for (int i = 0; i < KEYS.length; i++) {    
            keys[i].addActionListener(this);    
        }    
        for (int i = 0; i < COMMAND.length; i++) {    
            commands[i].addActionListener(this);    
        }    
        for (int i = 0; i < M.length; i++) {    
            m[i].addActionListener(this);    
        }    
    }    
     
    /**    
     * 處理事件    
     */    
    public void actionPerformed(ActionEvent e) {    
        // 獲取事件源的標簽    
        String label = e.getActionCommand();    
        if (label.equals(COMMAND[0])) {    
            // 用戶按了"Backspace"鍵    
            handleBackspace();    
        } else if (label.equals(COMMAND[1])) {    
            // 用戶按了"CE"鍵    
            resultText.setText("0");    
        } else if (label.equals(COMMAND[2])) {    
            // 用戶按了"C"鍵    
            handleC();    
        } else if ("0123456789.".indexOf(label) >= 0) {    
            // 用戶按了數字鍵或者小數點鍵    
            handleNumber(label);    
            // handlezero(zero);    
        } else {    
            // 用戶按了運算符鍵    
            handleOperator(label);    
        }    
    }    
     
    /**    
     * 處理Backspace鍵被按下的事件    
     */    
    private void handleBackspace() {    
        String text = resultText.getText();    
        int i = text.length();    
        if (i > 0) {    
            // 退格,將文本最後一個字元去掉    
            text = text.substring(0, i - 1);    
            if (text.length() == 0) {    
                // 如果文本沒有了內容,則初始化計算器的各種值    
                resultText.setText("0");    
                firstDigit = true;    
                operator = "=";    
            } else {    
                // 顯示新的文本    
                resultText.setText(text);    
            }    
        }    
    }    
     
    /**    
     * 處理數字鍵被按下的事件    
     *    
     * @param key    
     */    
    private void handleNumber(String key) {    
        if (firstDigit) {    
            // 輸入的第一個數字    
            resultText.setText(key);    
        } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {    
            // 輸入的是小數點,並且之前沒有小數點,則將小數點附在結果文本框的後面    
            resultText.setText(resultText.getText() + ".");    
        } else if (!key.equals(".")) {    
            // 如果輸入的不是小數點,則將數字附在結果文本框的後面    
            resultText.setText(resultText.getText() + key);    
        }    
        // 以後輸入的肯定不是第一個數字了    
        firstDigit = false;    
    }    
     
    /**    
     * 處理C鍵被按下的事件    
     */    
    private void handleC() {    
        // 初始化計算器的各種值    
        resultText.setText("0");    
        firstDigit = true;    
        operator = "=";    
    }    
     
    /**    
     * 處理運算符鍵被按下的事件    
     *    
     * @param key    
     */    
    private void handleOperator(String key) {    
        if (operator.equals("/")) {    
            // 除法運算    
            // 如果當前結果文本框中的值等於0    
            if (getNumberFromText() == 0.0) {    
                // 操作不合法    
                operateValidFlag = false;    
                resultText.setText("除數不能為零");    
            } else {    
                resultNum /= getNumberFromText();    
            }    
        } else if (operator.equals("1/x")) {    
            // 倒數運算    
            if (resultNum == 0.0) {    
                // 操作不合法    
                operateValidFlag = false;    
                resultText.setText("零沒有倒數");    
            } else {    
                resultNum = 1 / resultNum;    
            }    
        } else if (operator.equals("+")) {    
            // 加法運算    
            resultNum += getNumberFromText();    
        } else if (operator.equals("-")) {    
            // 減法運算    
            resultNum -= getNumberFromText();    
        } else if (operator.equals("*")) {    
            // 乘法運算    
            resultNum *= getNumberFromText();    
        } else if (operator.equals("sqrt")) {    
            // 平方根運算    
            resultNum = Math.sqrt(resultNum);    
        } else if (operator.equals("%")) {    
            // 百分號運算,除以100    
            resultNum = resultNum / 100;    
        } else if (operator.equals("+/-")) {    
            // 正數負數運算    
            resultNum = resultNum * (-1);    
        } else if (operator.equals("=")) {    
            // 賦值運算    
            resultNum = getNumberFromText();    
        }    
        if (operateValidFlag) {    
            // 雙精度浮點數的運算    
            long t1;    
            double t2;    
            t1 = (long) resultNum;    
            t2 = resultNum - t1;    
            if (t2 == 0) {    
                resultText.setText(String.valueOf(t1));    
            } else {    
                resultText.setText(String.valueOf(resultNum));    
            }    
        }    
        // 運算符等於用戶按的按鈕    
        operator = key;    
        firstDigit = true;    
        operateValidFlag = true;    
    }    
     
    /**    
     * 從結果文本框中獲取數字    
     *    
     * @return    
     */    
    private double getNumberFromText() {    
        double result = 0;    
        try {    
            result = Double.valueOf(resultText.getText()).doubleValue();    
        } catch (NumberFormatException e) {    
        }    
        return result;    
    }    
     
    public static void main(String args[]) {    
        Calculator calculator1 = new Calculator();    
        calculator1.setVisible(true);    
        calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    }    
}
『貳』 怎麼用java設計一個計算器
建議直接網上找源碼,有做好的那種
『叄』 用JAVA編寫一個簡單的計算器,要求如下
太麻煩了  說個思路, 過去字元串後  先獲取+-*%的下標.然後然後分割,獲取到一個數組或list
然後循環獲取()   按照數學運算順序拼起來,
然後把公式拆分一步一步操作就得出結果啦
『肆』 用Java設計一個簡單的計算器。
無聊寫了個,修復了下Bug:
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JTextField;
{
=1L;
privateJButtonplus,rece,multiply,divice,reset;
privateJTextFieldone,two,result;
privatebooleandevice_falg=false;
privatefinalintwidth=400,height=300;
publicCalculate(){
super("修改密碼");
this.setLayout(null);
this.setSize(width,height);
init();
Layout();
}
publicvoidinit(){
plus=newJButton("加");
rece=newJButton("減");
multiply=newJButton("乘");
divice=newJButton("除");
reset=newJButton("清空");
one=newJTextField();
two=newJTextField();
result=newJTextField();
}
publicvoidLayout(){
this.add(newJLabel("第一個數")).setBounds(20,10,60,80);
this.add(one).setBounds(100,38,100,25);
this.add(newJLabel("第二個數")).setBounds(20,40,60,80);
this.add(two).setBounds(100,70,100,25);
this.add(newJLabel("結果")).setBounds(20,85,60,80);
this.add(result).setBounds(100,110,100,25);
this.add(plus).setBounds(70,170,80,25);
this.add(rece).setBounds(200,170,80,25);
this.add(multiply).setBounds(70,200,80,25);
this.add(divice).setBounds(200,200,80,25);
this.add(reset).setBounds(300,220,80,25);
plus.addActionListener(this);
rece.addActionListener(this);
multiply.addActionListener(this);
divice.addActionListener(this);
reset.addActionListener(this);
this.setVisible(true);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
publicbooleanFormat(){
booleanFLAG=false;
booleanflag=false;
Stringone=this.one.getText().toString().trim();
Stringtwo=this.two.getText().toString().trim();
if(one==null||one.equals("")||two==null||two.equals("")){
JOptionPane.showMessageDialog(getParent(),"請輸入完整信息!");
FLAG=false;
flag=true;
}
booleanboll_1=one.matches("[\d]{1,100}");
booleanboll_2=two.matches("[\d]{1,100}");
booleanboll_3=one.matches("[\d]{1,100}+[.]+[\d]{1,100}");
booleanboll_4=two.matches("[\d]{1,100}+[.]+[\d]{1,100}");
if(flag){
returnfalse;
}
if((boll_1&&boll_2)||(boll_3&&boll_4)||(boll_1&&boll_4)
||(boll_3&&boll_2)){
FLAG=true;
}else{
JOptionPane.showMessageDialog(getParent(),"請輸入數字!");
FLAG=false;
}
if(FLAG&&device_falg){
if(Double.parseDouble(two)==0){
JOptionPane.showMessageDialog(getParent(),"被除數不能為0!");
FLAG=false;
device_falg=false;
}
}
returnFLAG;
}
publicdoublePlus(doubleone,doubletwo){
returnone+two;
}
publicdoubleMultiply(doubleone,doubletwo){
returnone*two;
}
publicdoubleDivice(doubleone,doubletwo){
returnone/two;
}
publicdoubleRece(doubleone,doubletwo){
returnone-two;
}
publicvoidClear(){
one.setText("");
two.setText("");
result.setText("");
}
@Override
publicvoidactionPerformed(ActionEvente){
Objecto=e.getSource();
if(o==reset){
Clear();
return;
}
if(o==divice){
device_falg=true;
}
if(!Format()){
return;
}
doubleone=Double.parseDouble(this.one.getText());
doubletwo=Double.parseDouble(this.two.getText());
doubleresult=0;
if(o==plus){
result=Plus(one,two);
}elseif(o==rece){
result=Rece(one,two);
}elseif(o==multiply){
result=Multiply(one,two);
}elseif(o==divice){
result=Divice(one,two);
}
this.result.setText(""+result);
}
publicstaticvoidmain(String[]args){
newCalculate();
}
}
『伍』 用java設計一個計算器 1.可以沒有界面,但要有輸入和輸出 2.整數,小數,加減乘除,求余,括弧
package com.electricauto.work.controller;
import java.awt.BorderLayout;  
import java.awt.Color;  
import java.awt.GridLayout;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import javax.swing.JButton;  
import javax.swing.JFrame;  
import javax.swing.JPanel;  
import javax.swing.JTextField;  
/** 
* 一個計算器,與Windows附件自帶計算器的標准版功能、界面相仿。 但還不支持鍵盤操作。 
*/  
public class jisuanqi extends JFrame implements ActionListener {  
/** 計算器上的鍵的顯示名字 */  
private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",  
"*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };  
/** 計算器上的功能鍵的顯示名字 */  
private final String[] COMMAND = { "Backspace", "CE", "C" };  
/** 計算器左邊的M的顯示名字 */  
private final String[] M = { " ", "MC", "MR", "MS", "M+" };  
/** 計算器上鍵的按鈕 */  
private JButton keys[] = new JButton[KEYS.length];  
/** 計算器上的功能鍵的按鈕 */  
private JButton commands[] = new JButton[COMMAND.length];  
/** 計算器左邊的M的按鈕 */  
private JButton m[] = new JButton[M.length];  
/** 計算結果文本框 */  
private JTextField resultText = new JTextField("0");  
// 標志用戶按的是否是整個表達式的第一個數字,或者是運算符後的第一個數字  
private boolean firstDigit = true;  
// 計算的中間結果。  
private double resultNum = 0.0;  
// 當前運算的運算符  
private String operator = "=";  
// 操作是否合法  
private boolean operateValidFlag = true;  
/** 
* 構造函數 
*/  
public jisuanqi() {  
super();  
// 初始化計算器  
init();  
// 設置計算器的背景顏色  
this.setBackground(Color.LIGHT_GRAY);  
this.setTitle("計算器");  
// 在屏幕(500, 300)坐標處顯示計算器  
this.setLocation(500, 300);  
// 不許修改計算器的大小  
this.setResizable(false);  
// 使計算器中各組件大小合適  
this.pack();  
}  
/** 
* 初始化計算器 
*/  
private void init() {  
// 文本框中的內容採用右對齊方式  
resultText.setHorizontalAlignment(JTextField.RIGHT);  
// 不允許修改結果文本框  
resultText.setEditable(false);  
// 設置文本框背景顏色為白色  
resultText.setBackground(Color.white);  
// 初始化計算器上鍵的按鈕,將鍵放在一個畫板內  
JPanel calckeysPanel = new JPanel();  
// 用網格布局器,4行,5列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素  
calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));  
for (int i = 0; i < KEYS.length; i++) {  
keys[i] = new JButton(KEYS[i]);  
calckeysPanel.add(keys[i]);  
keys[i].setForeground(Color.blue);  
}  
// 運算符鍵用紅色標示,其他鍵用藍色表示  
keys[3].setForeground(Color.red);  
keys[8].setForeground(Color.red);  
keys[13].setForeground(Color.red);  
keys[18].setForeground(Color.red);  
keys[19].setForeground(Color.red);  
// 初始化功能鍵,都用紅色標示。將功能鍵放在一個畫板內  
JPanel commandsPanel = new JPanel();  
// 用網格布局器,1行,3列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素  
commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));  
for (int i = 0; i < COMMAND.length; i++) {  
commands[i] = new JButton(COMMAND[i]);  
commandsPanel.add(commands[i]);  
commands[i].setForeground(Color.red);  
}  
// 初始化M鍵,用紅色標示,將M鍵放在一個畫板內  
JPanel calmsPanel = new JPanel();  
// 用網格布局管理器,5行,1列的網格,網格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素  
calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));  
for (int i = 0; i < M.length; i++) {  
m[i] = new JButton(M[i]);  
calmsPanel.add(m[i]);  
m[i].setForeground(Color.red);  
}  
// 下面進行計算器的整體布局,將calckeys和command畫板放在計算器的中部,  
// 將文本框放在北部,將calms畫板放在計算器的西部。  
// 新建一個大的畫板,將上面建立的command和calckeys畫板放在該畫板內  
JPanel panel1 = new JPanel();  
// 畫板採用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素  
panel1.setLayout(new BorderLayout(3, 3));  
panel1.add("North", commandsPanel);  
panel1.add("West", calckeysPanel);  
// 建立一個畫板放文本框  
JPanel top = new JPanel();  
top.setLayout(new BorderLayout());  
top.add("Center", resultText);  
// 整體布局  
getContentPane().setLayout(new BorderLayout(3, 5));  
getContentPane().add("North", top);  
getContentPane().add("Center", panel1);  
getContentPane().add("West", calmsPanel);  
// 為各按鈕添加事件偵聽器  
// 都使用同一個事件偵聽器,即本對象。本類的聲明中有implements ActionListener  
for (int i = 0; i < KEYS.length; i++) {  
keys[i].addActionListener(this);  
}  
for (int i = 0; i < COMMAND.length; i++) {  
commands[i].addActionListener(this);  
}  
for (int i = 0; i < M.length; i++) {  
m[i].addActionListener(this);  
}  
}  
/** 
* 處理事件 
*/  
public void actionPerformed(ActionEvent e) {  
// 獲取事件源的標簽  
String label = e.getActionCommand();  
if (label.equals(COMMAND[0])) {  
// 用戶按了"Backspace"鍵  
handleBackspace();  
} else if (label.equals(COMMAND[1])) {  
// 用戶按了"CE"鍵  
resultText.setText("0");  
} else if (label.equals(COMMAND[2])) {  
// 用戶按了"C"鍵  
handleC();  
} else if ("0123456789.".indexOf(label) >= 0) {  
// 用戶按了數字鍵或者小數點鍵  
handleNumber(label);  
// handlezero(zero);  
} else {  
// 用戶按了運算符鍵  
handleOperator(label);  
}  
}  
/** 
* 處理Backspace鍵被按下的事件 
*/  
private void handleBackspace() {  
String text = resultText.getText();  
int i = text.length();  
if (i > 0) {  
// 退格,將文本最後一個字元去掉  
text = text.substring(0, i - 1);  
if (text.length() == 0) {  
// 如果文本沒有了內容,則初始化計算器的各種值  
resultText.setText("0");  
firstDigit = true;  
operator = "=";  
} else {  
// 顯示新的文本  
resultText.setText(text);  
}  
}  
}  
/** 
* 處理數字鍵被按下的事件 
*  
* @param key 
*/  
private void handleNumber(String key) {  
if (firstDigit) {  
// 輸入的第一個數字  
resultText.setText(key);  
} else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {  
// 輸入的是小數點,並且之前沒有小數點,則將小數點附在結果文本框的後面  
resultText.setText(resultText.getText() + ".");  
} else if (!key.equals(".")) {  
// 如果輸入的不是小數點,則將數字附在結果文本框的後面  
resultText.setText(resultText.getText() + key);  
}  
// 以後輸入的肯定不是第一個數字了  
firstDigit = false;  
}  
/** 
* 處理C鍵被按下的事件 
*/  
private void handleC() {  
// 初始化計算器的各種值  
resultText.setText("0");  
firstDigit = true;  
operator = "=";  
}  
/** 
* 處理運算符鍵被按下的事件 
*  
* @param key 
*/  
private void handleOperator(String key) {  
if (operator.equals("/")) {  
// 除法運算  
// 如果當前結果文本框中的值等於0  
if (getNumberFromText() == 0.0) {  
// 操作不合法  
operateValidFlag = false;  
resultText.setText("除數不能為零");  
} else {  
resultNum /= getNumberFromText();  
}  
} else if (operator.equals("1/x")) {  
// 倒數運算  
if (resultNum == 0.0) {  
// 操作不合法  
operateValidFlag = false;  
resultText.setText("零沒有倒數");  
} else {  
resultNum = 1 / resultNum;  
}  
} else if (operator.equals("+")) {  
// 加法運算  
resultNum += getNumberFromText();  
} else if (operator.equals("-")) {  
// 減法運算  
resultNum -= getNumberFromText();  
} else if (operator.equals("*")) {  
// 乘法運算  
resultNum *= getNumberFromText();  
} else if (operator.equals("sqrt")) {  
// 平方根運算  
resultNum = Math.sqrt(resultNum);  
} else if (operator.equals("%")) {  
// 百分號運算,除以100  
resultNum = resultNum / 100;  
} else if (operator.equals("+/-")) {  
// 正數負數運算  
resultNum = resultNum * (-1);  
} else if (operator.equals("=")) {  
// 賦值運算  
resultNum = getNumberFromText();  
}  
if (operateValidFlag) {  
// 雙精度浮點數的運算  
long t1;  
double t2;  
t1 = (long) resultNum;  
t2 = resultNum - t1;  
if (t2 == 0) {  
resultText.setText(String.valueOf(t1));  
} else {  
resultText.setText(String.valueOf(resultNum));  
}  
}  
// 運算符等於用戶按的按鈕  
operator = key;  
firstDigit = true;//這個地方太tm巧妙了想好幾天, 先進行上一次操作,再將本次操作(最後一次操作)賦給操作,所以每次操作前都先進行上一次操作,默認操作為"=" 挺nb
operateValidFlag = true;  
}  
/** 
* 從結果文本框中獲取數字 
*  
* @return 
*/  
private double getNumberFromText() {  
double result = 0;  
try {  
result = Double.valueOf(resultText.getText()).doubleValue(); //顯示文字後不會蹦出
} catch (NumberFormatException e) {  
}  
return result;  
}  
public static void main(String args[]) {  
jisuanqi calculator1 = new jisuanqi();  
calculator1.setVisible(true);  
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
}  
}
========================================================
代碼比較多,放在任何一個項目里都行,新建一個叫做 jisuanqi 的java文件,粘貼進去就行,會有一個錯誤是包位置的選擇,點擊錯誤選擇正確的包位置就可以了,   無錯誤後執行文件最下面的main函數,就會出現計算器。有不懂的可以繼續問,望採納~!
『陸』 用java設計計算器
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 ,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 content=""; 
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); 
 = new JMenuItem(" 復制"); 
paste = new JMenuItem(" 粘貼"); 
KeyStroke ks=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK); 
.setAccelerator(ks);//設置退出菜單選項加上快捷鍵 
KeyStroke pasteks=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); 
paste.setAccelerator(pasteks);//設置退出菜單選項加上快捷鍵 
editMenu.add(); 
editMenu.add(paste); 
.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==) 
{ 
content = text.getText(); 
} 
if(temp==paste) 
{ 
text.setText(text.getText()+content); 
} 
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計算器 楊彩 製作 http://blog.sina.com.cn/m/yangcai","關於計算器",JOptionPane.INFORMATION_MESSAGE); ; 
} 
if(temp==me) 
{ 
try 
{ 
Process p = Runtime.getRuntime().exec("explorer http://blog.sina.com.cn/m/yangcai"); 
} 
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); 
} 
}
『柒』 用java語言,編寫一個計算器
有一個現成的.你看看吧
import java.awt.event.ActionEvent;
public class Application extends JFrame {
	protected String str = "";
	protected boolean isChar = true;
	protected boolean isEqual = false;
	protected JTextField textField;
	public Application() {
		Listener listerner = new Listener(this);
		getContentPane().setLayout(null);
		JButton button = new JButton("7");
		button.addActionListener(listerner);
		button.setBounds(12, 69, 43, 27);
		getContentPane().add(button);
		textField = new JTextField();
		textField.setText("0");
		textField.setEditable(false);
		textField.setHorizontalAlignment(JTextField.RIGHT);
		textField.setBounds(12, 22, 377, 27);
		getContentPane().add(textField);
		textField.setColumns(10);
		JButton button_1 = new JButton("8");
		button_1.addActionListener(listerner);
		button_1.setBounds(103, 69, 43, 27);
		getContentPane().add(button_1);
		JButton button_2 = new JButton("9");
		button_2.addActionListener(listerner);
		button_2.setBounds(182, 69, 43, 27);
		getContentPane().add(button_2);
		JButton button_3 = new JButton("4");
		button_3.addActionListener(listerner);
		button_3.setBounds(12, 106, 43, 27);
		getContentPane().add(button_3);
		JButton button_4 = new JButton("5");
		button_4.addActionListener(listerner);
		button_4.setBounds(103, 106, 43, 27);
		getContentPane().add(button_4);
		JButton button_5 = new JButton("6");
		button_5.addActionListener(listerner);
		button_5.setBounds(182, 106, 43, 27);
		getContentPane().add(button_5);
		JButton button_6 = new JButton("1");
		button_6.addActionListener(listerner);
		button_6.setBounds(12, 143, 43, 27);
		getContentPane().add(button_6);
		JButton button_7 = new JButton("2");
		button_7.addActionListener(listerner);
		button_7.setBounds(103, 143, 43, 27);
		getContentPane().add(button_7);
		JButton button_8 = new JButton("3");
		button_8.addActionListener(listerner);
		button_8.setBounds(182, 143, 43, 27);
		getContentPane().add(button_8);
		JButton button_9 = new JButton("+");
		button_9.addActionListener(listerner);
		button_9.setBounds(269, 72, 43, 27);
		getContentPane().add(button_9);
		JButton button_10 = new JButton("-");
		button_10.addActionListener(listerner);
		button_10.setBounds(346, 72, 43, 27);
		getContentPane().add(button_10);
		JButton button_11 = new JButton("*");
		button_11.addActionListener(listerner);
		button_11.setBounds(269, 109, 43, 27);
		getContentPane().add(button_11);
		JButton button_12 = new JButton("/");
		button_12.addActionListener(listerner);
		button_12.setBounds(346, 109, 43, 27);
		getContentPane().add(button_12);
		JButton button_13 = new JButton("=");
		button_13.addActionListener(listerner);
		button_13.setBounds(346, 143, 43, 27);
		getContentPane().add(button_13);
		JButton button_14 = new JButton("0");
		button_14.addActionListener(listerner);
		button_14.setBounds(103, 180, 43, 27);
		getContentPane().add(button_14);
		JButton btnReset = new JButton("reset");
		btnReset.addActionListener(listerner);
		btnReset.setBounds(269, 180, 118, 27);
		getContentPane().add(btnReset);
		JButton button_15 = new JButton(".");
		button_15.addActionListener(listerner);
		button_15.setBounds(269, 146, 43, 27);
		getContentPane().add(button_15);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		this.setSize(442, 260);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}
	public static void main(String[] args) {
		new Application();
	}
}
class Listener implements ActionListener {
	private Application app = null;
	public Listener(Application app) {
		this.app = app;
	}
	public void actionPerformed(ActionEvent e) {
		String value = e.getActionCommand();
		if (value.matches("[0-9.]")) {
			if (app.isChar) {
				app.textField.setText("");
				app.isChar = false;
			}
			if (app.isEqual && app.str.matches("[0-9.]*")) {
				app.str = "";
				app.isEqual = false;
			}
			app.str += value;
			app.textField.setText(app.textField.getText() + value);
		} else if (value.matches("[\\+\\-\\*/]")) {
			if (!app.str.substring(app.str.length() - 1)
					.matches("[\\+\\-\\*/]")) {
				app.str += value;
				app.isChar = true;
			}
		} else if ("=".equals(value)) {
			app.isEqual = true;
			if (app.str.substring(app.str.length() - 1).matches("[\\+\\-]")) {
				app.str += "0";
			} else if (app.str.substring(app.str.length() - 1)
					.matches("[\\*/]")) {
				app.str += "1";
			}
			Interpreter bsh = new Interpreter();
			String obj = null;
			try {
				obj = bsh.eval(app.str).toString();
			} catch (Exception exception) {
				System.out.println(exception.getMessage());
			}
			System.out.println(app.str);
			app.textField.setText(obj);
			app.str = obj;
			app.isChar = true;
		} else {
			app.str = "";
			app.textField.setText("0");
		}
	}
}
『捌』 java課程設計---計算器 要求如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;
public class CalculatorWindow extends JFrame implements ActionListener{
    NumberButton numberButton[];                  
    OperationButton operationButton[];             
    JButton 小數點操作,正負號操作,退格操作,等號操作,清零操作,sin;
    JTextField resultShow;          //顯示計算結果
    JTextField showComputerProcess; //顯示當前計算過程
    JTextArea  saveComputerProcess; //顯示計算步驟
    JButton saveButton,Button,clearButton;
    LinkedList<String> list;   //鏈表用來存放第一個運算數、運算符號和第二個運算數
    HandleDigit handleDigit;  //負責處理ActionEvent事件
    HandleOperation handleOperation ;
    HandleBack handleBack;
    HandleClear handleClear;
    HandleEquality handleEquality;
    HandleDot handleDot;
    HandlePOrN handlePOrN;
    HandleSin handleSin;
    public CalculatorWindow(){
        setTitle("計算器");
        JPanel panelLeft,panelRight; 
        list=new LinkedList<String>();
        resultShow=new JTextField(10);
        resultShow.setHorizontalAlignment(JTextField.RIGHT);
        resultShow.setForeground(Color.blue);
        resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
        resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
        resultShow.setEditable(false);
        resultShow.setBackground(Color.white);
        showComputerProcess=new JTextField();
        showComputerProcess.setHorizontalAlignment(JTextField.CENTER);
        showComputerProcess.setFont(new Font("Arial",Font.BOLD,16));
        showComputerProcess.setBackground(Color.cyan);
        showComputerProcess.setEditable(false);
        saveComputerProcess=new JTextArea();
        saveComputerProcess.setEditable(false);
        saveComputerProcess.setFont(new Font("宋體",Font.PLAIN,16));
        numberButton=new NumberButton[10];
        handleDigit=new HandleDigit(list,resultShow,showComputerProcess);
        for(int i=0;i<=9;i++){
            numberButton[i]=new NumberButton(i);
            numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
            numberButton[i].addActionListener(handleDigit);
        }
        operationButton=new OperationButton[4];
        handleOperation=new HandleOperation(list,resultShow,
                         showComputerProcess,saveComputerProcess);
        String 運算符號[]={"+","-","*","/"}; 
        for(int i=0;i<4;i++){
           operationButton[i]=new OperationButton(運算符號[i]);
           operationButton[i].setFont(new Font("Arial",Font.BOLD,20));
           operationButton[i].addActionListener(handleOperation);
        }
       小數點操作=new JButton(".");
       handleDot=new HandleDot(list,resultShow,showComputerProcess);
       小數點操作.addActionListener(handleDot);
       正負號操作=new JButton("+/-"); 
       handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess);
       正負號操作.addActionListener(handlePOrN);
       等號操作=new JButton("=");
       handleEquality=new HandleEquality(list,resultShow,
                                         showComputerProcess,saveComputerProcess);
       等號操作.addActionListener(handleEquality); 
       sin=new JButton("sin");
       handleSin=new HandleSin(list,resultShow,
                               showComputerProcess,saveComputerProcess);
       sin.addActionListener(handleSin);
       退格操作=new JButton("退格");
       handleBack=new HandleBack(list,resultShow,showComputerProcess);
       退格操作.addActionListener(handleBack);
       清零操作=new JButton("C");
       handleClear=new HandleClear(list,resultShow,showComputerProcess);
       清零操作.addActionListener(handleClear); 
       清零操作.setForeground(Color.red);
       退格操作.setForeground(Color.red);
       等號操作.setForeground(Color.red);
       sin.setForeground(Color.blue);
       正負號操作.setForeground(Color.blue);
       小數點操作.setForeground(Color.blue);
       panelLeft=new JPanel(); 
       panelRight=new JPanel();
       panelLeft.setLayout(new BorderLayout()); 
       JPanel centerInLeft=new JPanel();
       panelLeft.add(resultShow,BorderLayout.NORTH);
       panelLeft.add(centerInLeft,BorderLayout.CENTER);
       centerInLeft.setLayout(new GridLayout(4,5)); 
       centerInLeft.add(numberButton[1]);
       centerInLeft.add(numberButton[2]);
       centerInLeft.add(numberButton[3]);
       centerInLeft.add(operationButton[0]);
       centerInLeft.add(清零操作);
       centerInLeft.add(numberButton[4]);
       centerInLeft.add(numberButton[5]);
       centerInLeft.add(numberButton[6]);
       centerInLeft.add(operationButton[1]);
       centerInLeft.add(退格操作);
       centerInLeft.add(numberButton[7]);
       centerInLeft.add(numberButton[8]);
       centerInLeft.add(numberButton[9]);
       centerInLeft.add(operationButton[2]);
       centerInLeft.add(sin);
       centerInLeft.add(numberButton[0]);
       centerInLeft.add(正負號操作);
       centerInLeft.add(小數點操作);
       centerInLeft.add(operationButton[3]);
       centerInLeft.add(等號操作);
       panelRight.setLayout(new BorderLayout());
       panelRight.add(showComputerProcess,BorderLayout.NORTH);
       saveButton=new JButton("保存");
       Button=new JButton("復制");
       clearButton=new JButton("清除");
       saveButton.setToolTipText("保存計算過程到文件");
       Button.setToolTipText("復制選中的計算過程");
       clearButton.setToolTipText("清除計算過程");
       saveButton.addActionListener(this);
       Button.addActionListener(this);
       clearButton.addActionListener(this); 
       panelRight.add(new JScrollPane(saveComputerProcess),BorderLayout.CENTER);
       JPanel southInPanelRight=new JPanel();
       southInPanelRight.add(saveButton);
       southInPanelRight.add(Button);
       southInPanelRight.add(clearButton);
       panelRight.add(southInPanelRight,BorderLayout.SOUTH);
       JSplitPane split=new JSplitPane
                (JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight);
       add(split,BorderLayout.CENTER);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setVisible(true);
       setBounds(100,50,528,258);
       validate();
   }
   public void actionPerformed(ActionEvent e){
       if(e.getSource()==Button)
          saveComputerProcess.();
       if(e.getSource()==clearButton)
          saveComputerProcess.setText(null);
       if(e.getSource()==saveButton){
           JFileChooser chooser=new JFileChooser();
           int state=chooser.showSaveDialog(null);
           File file=chooser.getSelectedFile();
           if(file!=null&&state==JFileChooser.APPROVE_OPTION){
             try{  String content=saveComputerProcess.getText();
                   StringReader read=new StringReader(content);
                   BufferedReader in= new BufferedReader(read);
                   FileWriter outOne=new FileWriter(file);
                   BufferedWriter out= new BufferedWriter(outOne);
                   String str=null;
                   while((str=in.readLine())!=null){
                      out.write(str);
                      out.newLine();
                   }
                  in.close();
                  out.close();
             } 
             catch(IOException e1){}
           }
       }
   }
   public static void main(String args[]){
       new CalculatorWindow();
   }  
}
『玖』 如何java設計計算器並實現功能
java設計計算器,主要是使用java swing,對每個按鈕進行監聽,實現相關功能,如下代碼:
packagecom.qiu.lin.he;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
importjavax.swing.SwingConstants;
{
/**
*
*/
=1L;
Resultresult=newResult();//定義text的面板
Number_Keynumber_key=newNumber_Key();//定義按鈕面板
//當點擊按鈕+、-、*、/時,com=true
booleancom=false;
//當i=0時說明是我們第一次輸入,字元串text不會累加
inti=0;
//存放text的內容
Stringtext="";
//存放點擊按鈕+、-、*、/之前的數值
doubledefbutton=0;
//+、-、*、/的代號分別為1,2,3,4
intsymbol=0;
//構造函數
Jisuanqi(){
super("WangJiao");//設定標題
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設定關閉窗體時退出程序
JPanelpane=newJPanel();//定義主面板
pane.setLayout(newBorderLayout());
setBounds(380,220,30,80);//前兩個參數是在屏幕上顯示的坐標,後兩個是大小
//替換圖標
ImageIconicon=newImageIcon("F:1.GIF");
//Jisuanqi.class.getResource("APPLE.GIF")
//);
setIconImage(icon.getImage());
pane.add(result,BorderLayout.NORTH);
pane.add(number_key,BorderLayout.CENTER);
pane.add(number_key.equal,BorderLayout.SOUTH);
number_key.one.addActionListener(this);//對1按鈕添加監聽事件
number_key.two.addActionListener(this);//對2按鈕添加監聽事件
number_key.three.addActionListener(this);//對3按鈕添加監聽事件
number_key.four.addActionListener(this);//對4按鈕添加監聽事件
number_key.five.addActionListener(this);//對5按鈕添加監聽事件
number_key.six.addActionListener(this);//對6按鈕添加監聽事件
number_key.seven.addActionListener(this);//對7按鈕添加監聽事件
number_key.eight.addActionListener(this);//對8按鈕添加監聽事件
number_key.nine.addActionListener(this);//對9按鈕添加監聽事件
number_key.zero.addActionListener(this);//對0按鈕添加監聽事件
number_key.ce.addActionListener(this);//對置零按鈕添加監聽事件
number_key.plus.addActionListener(this);//對+按鈕添加監聽事件
number_key.equal.addActionListener(this);//對=按鈕添加監聽事件
number_key.sub.addActionListener(this);//對-按鈕添加監聽事件
number_key.mul.addActionListener(this);//對*按鈕添加監聽事件
number_key.div.addActionListener(this);//對/按鈕添加監聽事件
number_key.point.addActionListener(this);//對.按鈕添加監聽事件
setContentPane(pane);
pack();//初始化窗體大小為正好盛放所有按鈕
}
//各個按鈕觸發的事件
publicvoidactionPerformed(ActionEvente){
/*
*如果是點擊數字按鈕那麼先要判斷是否在此之前點擊了+、-、*、/、=,如果是那麼com=true如果沒有com=
*false;或者是否點擊數字鍵,如果是i=1,如果沒有i=0;
*/
if(e.getSource()==number_key.one){
if(com||i==0){
result.text.setText("1");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"1");
}
}elseif(e.getSource()==number_key.two){
if(com||i==0){
result.text.setText("2");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"2");
}
}elseif(e.getSource()==number_key.three){
if(com||i==0){
result.text.setText("3");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"3");
}
}elseif(e.getSource()==number_key.four){
if(com||i==0){
result.text.setText("4");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"4");
}
}elseif(e.getSource()==number_key.five){
if(com||i==0){
result.text.setText("5");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"5");
}
}elseif(e.getSource()==number_key.six){
if(com||i==0){
result.text.setText("6");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"6");
}
}elseif(e.getSource()==number_key.seven){
if(com||i==0){
result.text.setText("7");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"7");
}
}elseif(e.getSource()==number_key.eight){
if(com||i==0){
result.text.setText("8");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"8");
}
}elseif(e.getSource()==number_key.nine){
if(com||i==0){
result.text.setText("9");
com=false;
i=1;
}else{
text=result.text.getText();
result.text.setText(text+"9");
}
}
/*
*對於0這個按鈕有一定的說法,在我的程序里不會出現如00000這樣的情況,我加了判斷條件就是
*如果text中的數值=0就要判斷在這個數值中是否有.存在?如果有那麼就在原來數值基礎之上添加0;否則保持原來的數值不變
*/
elseif(e.getSource()==number_key.zero){//result.text.getText()是得到text里內容的意思
if(com||i==0){
result.text.setText("0");
com=false;
i=1;
}else{
text=result.text.getText();
if(Float.parseFloat(text)>0||Float.parseFloat(text)<0){//Float.parseFloat(text)就是類型轉換了,下面都是一樣
result.text.setText(text+"0");
}else{
if(text.trim().indexOf(".")==-1){
result.text.setText(text);
}else{
result.text.setText(text+"0");
}
}
}
}elseif(e.getSource()==number_key.ce){
result.text.setText("0");
i=0;
com=true;
//text="";
defbutton=0;
}
/*
*本程序不會讓一個數值中出現2個以上的小數點.具體做法是:判斷是否已經存在.存在就不添加,不存在就添加.
*/
elseif(e.getSource()==number_key.point){
if(com||i==0){
result.text.setText("0.");
com=false;
i=1;
}else{
text=result.text.getText();
if(text.trim().indexOf(".")==-1){
result.text.setText(text+".");
}else{
result.text.setText(text);
}
}
}//獲得點擊+之前的數值
elseif(e.getSource()==number_key.plus){
com=true;
i=0;
defbutton=Double.parseDouble(result.text.getText());
symbol=1;
}//獲得點擊-之前的數值
elseif(e.getSource()==number_key.sub){
com=true;
i=0;
defbutton=Double.parseDouble(result.text.getText());
symbol=2;
}//獲得點擊*之前的數值
elseif(e.getSource()==number_key.mul){
com=true;
i=0;
defbutton=Double.parseDouble(result.text.getText());
System.out.println(defbutton);
symbol=3;
}//獲得點擊/之前的數值
elseif(e.getSource()==number_key.div){
com=true;
i=0;
defbutton=Double.parseDouble(result.text.getText());
symbol=4;
}elseif(e.getSource()==number_key.equal){
switch(symbol){
case1:{//計算加法
doublead=defbutton
+Double.parseDouble(result.text.getText());
result.text.setText(ad+"");
i=0;
text="";
break;
}
case2:{//計算減法
doublead=defbutton
-Double.parseDouble(result.text.getText());
result.text.setText(String.valueOf(ad));
i=0;
text="";
break;
}
case3:{//計算乘法
doublead=defbutton
*Double.parseDouble(result.text.getText());
result.text.setText(ad+"");
i=0;
text="";
break;
}
case4:{//計算除法
doublead=defbutton
/Double.parseDouble(result.text.getText());
result.text.setText(ad+"");
i=0;
text="";
break;
}
}
System.out.println(com);
}
System.out.println(result.text.getText());
}
@SuppressWarnings("deprecation")
publicstaticvoidmain(String[]args){
Jisuanqiloveyou=newJisuanqi();
loveyou.show();
}
}
//計算器數字按鈕定義面板
classNumber_KeyextendsJPanel{
/**
*
*/
=1L;
JButtonzero=newJButton("0");//數字鍵0
JButtonone=newJButton("1");//數字鍵1
JButtontwo=newJButton("2");//數字鍵2
JButtonthree=newJButton("3");//數字鍵3
JButtonfour=newJButton("4");//數字鍵4
JButtonfive=newJButton("5");//數字鍵5
JButtonsix=newJButton("6");//數字鍵6
JButtonseven=newJButton("7");//數字鍵7
JButtoneight=newJButton("8");//數字鍵8
JButtonnine=newJButton("9");//數字鍵9
JButtonplus=newJButton("+");
JButtonsub=newJButton("-");
JButtonmul=newJButton("*");
JButtondiv=newJButton("/");
JButtonequal=newJButton("=");
JButtonce=newJButton("清零");//置零鍵
JButtonpoint=newJButton(".");
Number_Key(){
setLayout(newGridLayout(4,4,1,1));//定義布局管理器為網格布局
setBackground(Color.blue);//設置背景顏色
//添加按鈕
add(one);
add(two);
add(three);
add(four);
add(five);
add(six);
add(seven);
add(eight);
add(nine);
add(zero);
add(plus);
add(sub);
add(mul);
add(div);
add(point);
add(equal);
add(ce);
}
}
//計算器顯示結果的窗體
classResultextendsJPanel{
/**
*
*/
=1L;
//text先是輸入和結果
JTextFieldtext=newJTextField("0");
@SuppressWarnings("deprecation")
Result(){//講輸入的數字或得到的結果在text的右邊顯示
text.setHorizontalAlignment(SwingConstants.RIGHT);
text.enable(false);//文本框不能編輯
setLayout(newBorderLayout());//設定布局管理器邊框布局
add(text,BorderLayout.CENTER);//text放置在窗體的中間
}
}
運行結果如下:

