java怎么做计算器_怎么做一个JAVA计算器?

展开全部

class CalcBtn extends JButton {

private static final long serialVersionUID = 1L;

Font font = new Font("仿宋", 1, 22);

public CalcBtn(String text, Color color) {

e69da5e887aa3231313335323631343130323136353331333330336331super(text);

setForeground(color);

setFont(font);

setMargin(new Insets(0, 0, 0, 0));

setFocusable(false);

}

}

@SuppressWarnings("serial")

public class CalcFrame extends JFrame implements ActionListener {

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception ex) {

ex.printStackTrace();

}

new CalcFrame().setVisible(true);

}

private CalcBtn btn_1 = new CalcBtn("1", Color.BLUE);

private CalcBtn btn_2 = new CalcBtn("2", Color.BLUE);

private CalcBtn btn_3 = new CalcBtn("3", Color.BLUE);

private CalcBtn btn_4 = new CalcBtn("4", Color.BLUE);

private CalcBtn btn_5 = new CalcBtn("5", Color.BLUE);

private CalcBtn btn_6 = new CalcBtn("6", Color.BLUE);

private CalcBtn btn_7 = new CalcBtn("7", Color.BLUE);

private CalcBtn btn_8 = new CalcBtn("8", Color.BLUE);

private CalcBtn btn_9 = new CalcBtn("9", Color.BLUE);

private CalcBtn btn_0 = new CalcBtn("0", Color.BLUE);

private CalcBtn btn_back = new CalcBtn("←", Color.red);

private CalcBtn btn_c = new CalcBtn("C", Color.red);

private CalcBtn btn_ce = new CalcBtn("CE", Color.red);

private CalcBtn btn_sub = new CalcBtn("-", Color.red);

private CalcBtn btn_multi = new CalcBtn("*", Color.red);

private CalcBtn btn_div = new CalcBtn("/", Color.red);

private CalcBtn btn_add = new CalcBtn("+", Color.red);

private CalcBtn btn_sqrt = new CalcBtn("sqrt", Color.BLUE);

private CalcBtn btn_mod = new CalcBtn("%", Color.BLUE);

private CalcBtn btn_x = new CalcBtn("1/x", Color.BLUE);

private CalcBtn btn_res = new CalcBtn("=", Color.red);

private CalcBtn btn_point = new CalcBtn(".", Color.red);

private CalcBtn btn_flag = new CalcBtn("+/-", Color.BLUE);

private JButton btn_mem = new JButton("");

private CalcBtn btn_m = new CalcBtn("M+", Color.BLUE);

private CalcBtn btn_mc = new CalcBtn("MC", Color.BLUE);

private CalcBtn btn_mr = new CalcBtn("MR", Color.BLUE);

private CalcBtn btn_ms = new CalcBtn("MS", Color.BLUE);

JPanel pan_jtf = new JPanel();

JPanel pan_back = new JPanel();

JPanel pan_mem = new JPanel();

JPanel pan_num = new JPanel();

JTextField jtf_res = new JTextField();

//

private JMenuBar menuBar = new JMenuBar();

private JMenu menu_edit = new JMenu("编辑(E)");

private JMenu menu_view = new JMenu("查看(V)");

private JMenu menu_help = new JMenu("帮助(H)");

private JMenuItem editMenu_copy = new JMenuItem("复制(C)");

private JMenuItem editMenu_paste = new JMenuItem("粘贴(P)");

private JCheckBoxMenuItem viewmenu_standard = new JCheckBoxMenuItem(

"标准型(T)");

private JCheckBoxMenuItem viewmenu_science = new JCheckBoxMenuItem("科学型(S)");

private JCheckBoxMenuItem viewmenu_grouping = new JCheckBoxMenuItem(

"数字分组(I)");

private JMenuItem helpmenu_help = new JMenuItem("帮助主题(H)");

private JMenuItem helpmenu_about = new JMenuItem("关于计算器(A)");

String save1, save2;

BigDecimal op1, op2;

boolean isBigDecimal = false;

int preOp, currentOp = 0;

StringBuffer str = new StringBuffer();

public CalcFrame() {

this.setTitle(" 於 ☆ 弦 ");

this.setResizable(false);

setSize(444, 390);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setJMenuBar(menuBar);

setLayout(null);

init_pan_jtf();

init_menuBar();

init_pan_back();

init_pan_mem();

init_pan_num();

getContentPane().add(pan_jtf);

getContentPane().add(pan_back);

getContentPane().add(pan_mem);

getContentPane().add(pan_num);

}

private void init_menuBar() {

menuBar.add(menu_edit);

menuBar.add(menu_view);

menuBar.add(menu_help);

menu_edit.add(editMenu_copy);

menu_edit.add(editMenu_paste);

menu_view.add(viewmenu_standard);

menu_view.add(viewmenu_science);

menu_view.addSeparator();

menu_view.add(viewmenu_grouping);

menu_help.add(helpmenu_help);

menu_help.addSeparator();

menu_help.add(helpmenu_about);

menu_edit.setMnemonic('E');

menu_view.setMnemonic('V');

menu_help.setMnemonic('H');

editMenu_copy.setMnemonic('C');

editMenu_copy.setAccelerator(KeyStroke.getKeyStroke('C',

InputEvent.CTRL_MASK));

editMenu_paste.setMnemonic('P');

editMenu_paste.setAccelerator(KeyStroke.getKeyStroke('V',

InputEvent.CTRL_MASK));

viewmenu_standard.setMnemonic('T');

viewmenu_science.setMnemonic('S');

viewmenu_grouping.setMnemonic('I');

helpmenu_help.setMnemonic('H');

helpmenu_about.setMnemonic('A');

}

public void init_pan_back() {

pan_back.setSize(340, 40);

pan_back.setLocation(85, 60);

pan_back.setLayout(new GridLayout(1, 3, 5, 0));

pan_back.add(btn_back);

pan_back.add(btn_ce);

pan_back.add(btn_c);

btn_back.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

if (!jtf_res.getText().trim().equals("0.")) {

if (str.length() != 1 && str.length() != 0) {

jtf_res.setText(str.delete(str.length() - 1,

str.length()).toString());

} else {

jtf_res.setText("0.");

str.setLength(0);

}

}

op2 = new BigDecimal(jtf_res.getText().trim());

}

});

btn_c.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

jtf_res.setText("0.");

op1 = op2 = new BigDecimal(0);

str.replace(0, str.length(), " ");

preOp = currentOp = 0;

}

});

btn_ce.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

jtf_res.setText("0.");

}

});

}

public void init_pan_jtf() {

jtf_res.setHorizontalAlignment(JTextField.RIGHT);

jtf_res.setFont(new Font("仿宋", 0, 20));

jtf_res.setText("0.");

jtf_res.setEditable(false);

// jtf_res.setFocusable(false);

pan_jtf.setSize(420, 40);

pan_jtf.setLocation(10, 5);

pan_jtf.setLayout(new BorderLayout());

pan_jtf.add(jtf_res);

}

public void init_pan_mem() {

pan_mem.setSize(60, 270);

pan_mem.setLocation(10, 60);

pan_mem.setLayout(new GridLayout(5, 1, 0, 5));

pan_mem.add(btn_mem);

btn_mem.setEnabled(false);

pan_mem.add(btn_mc);

pan_mem.add(btn_mr);

pan_mem.add(btn_ms);

pan_mem.add(btn_m);

}

public void init_pan_num() {

pan_num.setSize(340, 220);

pan_num.setLocation(85, 110);

pan_num.setLayout(new GridLayout(4, 5, 5, 5));

pan_num.add(btn_7);

pan_num.add(btn_8);

pan_num.add(btn_9);

pan_num.add(btn_div);

pan_num.add(btn_sqrt);

pan_num.add(btn_4);

pan_num.add(btn_5);

pan_num.add(btn_6);

pan_num.add(btn_multi);

pan_num.add(btn_mod);

pan_num.add(btn_1);

pan_num.add(btn_2);

pan_num.add(btn_3);

pan_num.add(btn_sub);

pan_num.add(btn_x);

pan_num.add(btn_0);

pan_num.add(btn_flag);

pan_num.add(btn_point);

pan_num.add(btn_add);

pan_num.add(btn_res);

btn_1.addActionListener(this);

btn_2.addActionListener(this);

btn_3.addActionListener(this);

btn_4.addActionListener(this);

btn_5.addActionListener(this);

btn_6.addActionListener(this);

btn_7.addActionListener(this);

btn_8.addActionListener(this);

btn_9.addActionListener(this);

btn_0.addActionListener(this);

btn_sub.addActionListener(this);

btn_multi.addActionListener(this);

btn_div.addActionListener(this);

btn_add.addActionListener(this);

btn_sqrt.addActionListener(this);

btn_x.addActionListener(this);

btn_res.addActionListener(this);

btn_point.addActionListener(this);

btn_flag.addActionListener(this);

// btn_mod.addActionListener(this);

}

@Override

public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

BigDecimal i = new BigDecimal(1);

String temp = jtf_res.getText().trim();

BigDecimal temp1 = new BigDecimal(temp);

if (e.getSource() == btn_flag) {

BigDecimal temp3 = new BigDecimal(jtf_res.getText());

BigDecimal temp4 = new BigDecimal(-1);

BigDecimal temp5 = temp3.multiply(temp4);

jtf_res.setText("" + temp5);

} else if (s.equals("1/x")) {

jtf_res.setText("" + i.divide(temp1, new MathContext(30)));

} else if (s.equals("sqrt")) {

jtf_res.setText("" + temp1.multiply(temp1));

} else if (s.equals("+")) {

str.setLength(0);

if (currentOp == 0) {

preOp = currentOp = 1;

op2 = new BigDecimal("0");

jtf_res.setText("" + op1);

} else {

currentOp = preOp;

preOp = 1;

switch (currentOp) {

case 1:

op1 = op1.add(op2);

jtf_res.setText("" + op1);

break;

case 2:

op1 = op1.subtract(op2);

jtf_res.setText("" + op1);

break;

case 3:

op1 = op1.multiply(op2);

jtf_res.setText("" + op1);

break;

case 4:

op1 = op1.divide(op2, new MathContext(30));

jtf_res.setText("" + op1);

break;

}

}

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

str.setLength(0);

if (currentOp == 0) {

preOp = currentOp = 2;

jtf_res.setText("" + op1);

} else {

currentOp = preOp;

preOp = 2;

switch (currentOp) {

case 1:

op1 = op1.add(op2);

jtf_res.setText("" + op1);

break;

case 2:

op1 = op1.subtract(op2);

jtf_res.setText("" + op1);

break;

case 3:

op1 = op1.multiply(op2);

jtf_res.setText("" + op1);

break;

case 4:

op1 = op1.divide(op2, new MathContext(30));

jtf_res.setText("" + op1);

break;

}

}

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

str.setLength(0);

if (currentOp == 0) {

preOp = currentOp = 3;

jtf_res.setText("" + op1);

} else {

currentOp = preOp;

preOp = 3;

switch (currentOp) {

case 1:

op1 = op1.add(op2);

jtf_res.setText("" + op1);

break;

case 2:

op1 = op1.subtract(op2);

jtf_res.setText("" + op1);

break;

case 3:

op1 = op1.multiply(op2);

jtf_res.setText("" + op1);

break;

case 4:

op1 = op1.divide(op2, new MathContext(30));

jtf_res.setText("" + op1);

break;

}

}

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

str.setLength(0);

if (currentOp == 0) {

preOp = currentOp = 4;

jtf_res.setText("" + op1);

} else {

currentOp = preOp;

preOp = 4;

switch (currentOp) {

case 1:

op1 = op1.add(op2);

jtf_res.setText("" + op1);

break;

case 2:

op1 = op1.subtract(op2);

jtf_res.setText("" + op1);

break;

case 3:

op1 = op1.multiply(op2);

jtf_res.setText("" + op1);

break;

case 4:

op1 = op1.divide(op2, new MathContext(30));

jtf_res.setText("" + op1);

break;

}

}

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

if (currentOp == 0) {

str.setLength(0);

jtf_res.setText("" + op2);

} else {

str.setLength(0);

currentOp = preOp;

switch (currentOp) {

case 1:

op1 = op1.add(op2);

jtf_res.setText("" + op1);

break;

case 2:

op1 = op1.subtract(op2);

jtf_res.setText("" + op1);

break;

case 3:

op1 = op1.multiply(op2);

jtf_res.setText("" + op1);

break;

case 4:

op1 = op1.divide(op2, new MathContext(30));

jtf_res.setText("" + op1);

break;

}

currentOp = 0;

op2 = new BigDecimal("0");

}

} else if (s.equals(".")) {

isBigDecimal = true;

if (jtf_res.getText().trim().indexOf('.') != -1)

;

else {

if (jtf_res.getText().trim().equals("0")) {

str.setLength(0);

jtf_res.setText((str.append("0" + s)).toString());

} else if (jtf_res.getText().trim().equals("")) {

} else {

jtf_res.setText((str.append(s)).toString());

}

}

} else if (s.equals("0")) {

if (jtf_res.getText().trim().equals("0.")) {

} else {

jtf_res.setText(str.append(s).toString());

op2 = new BigDecimal(jtf_res.getText().trim());

}

} else {

jtf_res.setText(str.append(s).toString());

op2 = new BigDecimal(jtf_res.getText().trim());

if (currentOp == 0)

op1 = op2;

}

}

}

8fc6cdd2e30ccecf862e5f148e706ff0.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值