中易网

JAVA_用Swing做一个计算器

答案:3  悬赏:70  
解决时间 2021-01-11 06:34
  • 提问者网友:佞臣
  • 2021-01-10 14:40
JAVA_用Swing做一个计算器
最佳答案
  • 二级知识专家网友:杯酒困英雄
  • 2021-01-10 16:04
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JCalculator extends JFrame implements ActionListener {
private static final long serialVersionUID = -169068472193786457L;
private class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}

int i;
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
"2", "3", "-", ".", "0", "=", "+" };
// 建立按钮
JButton[] buttons = new JButton[str.length];
// 撤销重置
JButton reset = new JButton("CE");
// 建立文本域显示结果
JTextField display = new JTextField("0");

public JCalculator() {
super("Calculator");
// 添加一个面板
JPanel panel1 = new JPanel(new GridLayout(4, 4));
// panel1.setLayout(new GridLayout(4,4));
for (i = 0; i < str.length; i++) {
buttons[i] = new JButton(str[i]);
panel1.add(buttons[i]);
}
JPanel panel2 = new JPanel(new BorderLayout());
// panel2.setLayout(new BorderLayout());
panel2.add("Center", display);
panel2.add("East", reset);
// JPanel panel3 = new Panel();
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North", panel2);
getContentPane().add("Center", panel1);
// 添加操作动作的监听器.
for (i = 0; i < str.length; i++)
buttons[i].addActionListener(this);
// 为重置按钮添加监听器
reset.addActionListener(this);
display.addActionListener(this);
// The "close" button "X".
addWindowListener(new WindowCloser());
// Initialize the window size.
setSize(800, 800);
// Show the window.
// show(); Using show() while JDK version is below 1.5.
setVisible(true);
// Fit the certain size.
pack();
}

public void actionPerformed(ActionEvent e) {
Object target = e.getSource();
String label = e.getActionCommand();
if (target == reset)
handleReset();
else if ("0123456789.".indexOf(label) > 0)
handleNumber(label);
else
handleOperator(label);
}
// Is the first digit pressed?
boolean isFirstDigit = true;

public void handleNumber(String key) {
if (isFirstDigit)
display.setText(key);
else if ((key.equals(".")) && (display.getText().indexOf(".") < 0))
display.setText(display.getText() + ".");
else if (!key.equals("."))
display.setText(display.getText() + key);
isFirstDigit = false;
}


public void handleReset() {
display.setText("0");
isFirstDigit = true;
operator = "=";
}

double number = 0.0;
String operator = "=";

public void handleOperator(String key) {
if (operator.equals("+"))
number += Double.valueOf(display.getText());
else if (operator.equals("-"))
number -= Double.valueOf(display.getText());
else if (operator.equals("*"))
number *= Double.valueOf(display.getText());
else if (operator.equals("/"))
number /= Double.valueOf(display.getText());
else if (operator.equals("="))
number = Double.valueOf(display.getText());
display.setText(String.valueOf(number));
operator = key;
isFirstDigit = true;
}

public static void main(String[] args) {
new JCalculator();
}
}
全部回答
  • 1楼网友:西岸风
  • 2021-01-10 17:42

你可以看看,希望能帮到你。
  • 2楼网友:神的生死簿
  • 2021-01-10 16:38
 
  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;  
  
public class Calculator extends JFrame implements ActionListener {  
      
    private static final long serialVersionUID = 1L;  
    private JTextField txtResult;  
    private JButton btnZero, btnOne, btnTwo, btnThree, btnFour, btnFive,  
            btnSix, btnSeven, btnEight, btnNine, btnPlus, btnMinus, btnTimes,  
            btnDivided, btnEqual, btnPoint, btnC, btnCE, btnSqrt, btnPlusMinus;  
    int z;  
    double x, y;  
    StringBuffer str;  
  
    public Calculator() {  
        super("计算器");  
        this.setSize(311, 231);  
        this.setLocation(300, 300);  
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        this.setLayout(new GridLayout(1, 1));// 网格布局  
        JPanel panel = new JPanel(new GridLayout(6, 1));// 面板 网格布局6行1列  
        this.add(panel);  
  
        txtResult = new JTextField("0");  
        Color BackColor = new Color(255, 255, 255);  
        Color ForeColor = new Color(0, 0, 0);  
        txtResult.setBackground(BackColor);  
        txtResult.setForeground(ForeColor);  
  
        panel.add(txtResult);  
        txtResult.setHorizontalAlignment(JTextField.RIGHT);  
        txtResult.setEnabled(false);  
        // text.setEnabled(true);  
  
        JPanel panel_1 = new JPanel(new GridLayout(1, 4));  
        panel.add(panel_1);  
  
        btnSqrt = new JButton("sqrt");  
        panel_1.add(btnSqrt);  
        btnSqrt.addActionListener(this);  
        btnPlusMinus = new JButton("+/-");  
        panel_1.add(btnPlusMinus);  
        btnPlusMinus.addActionListener(this);  
        btnCE = new JButton("CE");  
        panel_1.add(btnCE);  
        btnCE.addActionListener(this);  
        btnC = new JButton("C");  
        panel_1.add(btnC);  
        btnC.addActionListener(this);  
  
        JPanel panel_2 = new JPanel(new GridLayout(1, 4));  
        panel.add(panel_2);  
  
        btnSeven = new JButton("7");  
        panel_2.add(btnSeven);  
        btnSeven.addActionListener(this);  
        btnEight = new JButton("8");  
        panel_2.add(btnEight);  
        btnEight.addActionListener(this);  
        btnNine = new JButton("9");  
        panel_2.add(btnNine);  
        btnNine.addActionListener(this);  
        btnDivided = new JButton("/");  
        panel_2.add(btnDivided);  
        btnDivided.addActionListener(this);  
  
        JPanel panel_3 = new JPanel(new GridLayout(1, 4));  
        panel.add(panel_3);  
  
        btnFour = new JButton("4");  
        panel_3.add(btnFour);  
        btnFour.addActionListener(this);  
        btnFive = new JButton("5");  
        panel_3.add(btnFive);  
        btnFive.addActionListener(this);  
        btnSix = new JButton("6");  
        panel_3.add(btnSix);  
        btnSix.addActionListener(this);  
        btnTimes = new JButton("*");  
        panel_3.add(btnTimes);  
        btnTimes.addActionListener(this);  
  
        JPanel panel_4 = new JPanel(new GridLayout(1, 4));  
        panel.add(panel_4);  
  
        btnOne = new JButton("1");  
        panel_4.add(btnOne);  
        btnOne.addActionListener(this);  
        btnTwo = new JButton("2");  
        panel_4.add(btnTwo);  
        btnTwo.addActionListener(this);  
        btnThree = new JButton("3");  
        panel_4.add(btnThree);  
        btnThree.addActionListener(this);  
        btnMinus = new JButton("-");  
        panel_4.add(btnMinus);  
        btnMinus.addActionListener(this);  
  
        JPanel panel_5 = new JPanel(new GridLayout(1, 4));  
        panel.add(panel_5);  
  
        btnZero = new JButton("0");  
        panel_5.add(btnZero);  
        btnZero.addActionListener(this);  
        btnPoint = new JButton(".");  
        panel_5.add(btnPoint);  
        btnPoint.addActionListener(this);  
        btnEqual = new JButton("=");  
        panel_5.add(btnEqual);  
        btnEqual.addActionListener(this);  
        btnPlus = new JButton("+");  
        panel_5.add(btnPlus);  
        btnPlus.addActionListener(this);  
  
        str = new StringBuffer();  
  
        this.setVisible(true);  
  
    }  
  
    public void windowClosing(WindowEvent a) {  
        System.exit(0);  
    }  
  
    public void actionPerformed(ActionEvent e) {  
  
        try {  
            if (e.getSource() == btnC) {  
                txtResult.setText("0");  
                str.setLength(0);  
            } else if (e.getSource() == btnCE) {  
                txtResult.setText("0.");  
                str.setLength(0);  
            } else if (e.getSource() == btnPlusMinus) {  
                x = Double.parseDouble(txtResult.getText().trim());  
                txtResult.setText("" + (-x));  
            }  
  
            else if (e.getSource() == btnPlus) {  
                x = Double.parseDouble(txtResult.getText().trim());  
                str.setLength(0);  
                y = 0d;  
                z = 1;  
            } else if (e.getSource() == btnMinus) {  
                x = Double.parseDouble(txtResult.getText().trim());  
                str.setLength(0);  
                y = 0d;  
                z = 2;  
            } else if (e.getSource() == btnTimes) {  
                x = Double.parseDouble(txtResult.getText().trim());  
                str.setLength(0);  
                y = 0d;  
                z = 3;  
            } else if (e.getSource() == btnDivided) {  
                x = Double.parseDouble(txtResult.getText().trim());  
                str.setLength(0);  
                y = 0d;  
                z = 4;  
            } else if (e.getSource() == btnEqual) {  
                str.setLength(0);  
                switch (z) {  
                case 1:  
                    txtResult.setText("" + (x + y));  
                    break;  
                case 2:  
                    txtResult.setText("" + (x - y));  
                    break;  
                case 3:  
                    txtResult.setText("" + (x * y));  
                    break;  
                case 4:  
                    txtResult.setText("" + (x / y));  
                    break;  
                }  
            }  
  
            else if (e.getSource() == btnPoint) {  
                if (txtResult.getText().trim().indexOf('.') != -1)// 判断字符串中是否已经包含了小数点  
                {  
  
                } else// 如果没数点有小  
                {  
                    if (txtResult.getText().trim().equals("0"))// 如果初时显示为0  
                    {  
                        str.setLength(0);  
                        txtResult.setText((str.append("0"  
                                + e.getActionCommand())).toString());  
                    } else if (txtResult.getText().trim().equals(""))// 如果初时显示为空则不做任何操作  
                    {  
                    } else {  
                        txtResult.setText(str.append(e.getActionCommand())  
                                .toString());  
                    }  
                }  
  
                y = 0d;  
            }  
  
            else if (e.getSource() == btnSqrt)// 求平方根  
            {  
                x = Double.parseDouble(txtResult.getText().trim());  
                txtResult.setText("数字格式异常");  
                if (x < 0)  
                    txtResult.setText("负数没有平方根");  
                else  
                    txtResult.setText("" + Math.sqrt(x));  
                str.setLength(0);  
                y = 0d;  
            }  
  
            else if (e.getSource() == btnZero)// 如果选择的是"0"这个数字键  
            {  
                if (txtResult.getText().trim().equals("0"))// 如果显示屏显示的为零不做操作  
                {  
                } else {  
                    txtResult.setText(str.append(e.getActionCommand())  
                            .toString());  
                    y = Double.parseDouble(txtResult.getText().trim());  
                }  
            }  
  
            else// 其他的数字键  
            {  
                txtResult.setText(str.append(e.getActionCommand()).toString());  
                y = Double.parseDouble(txtResult.getText().trim());  
            }  
        } catch (NumberFormatException ae) {  
            txtResult.setText("数字格式异常");  
        } catch (StringIndexOutOfBoundsException ae) {  
            txtResult.setText("字符串索引越界");  
        }  
  
    }  
  
    public static void main(String arg[]) {  
        try {  
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());  
        } catch (Exception e) {  
            e.printStackTrace();  
        }   
        new Calculator();  
    }  
  
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息