java 图形界面设计制作计算器

2025-05-14 06:45:06
推荐回答(3个)
回答1:

import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.text.NumberFormat;

public class JSQ extends JFrame implements ActionListener {
float i = 0;
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();

JButton bt1 = new JButton("+");
JButton bt2 = new JButton("-");
JButton bt3 = new JButton("*");
JButton bt4 = new JButton("/");
JButton bt5 = new JButton("1");
JButton bt6 = new JButton("2");
JButton bt7 = new JButton("3");
JButton bt8 = new JButton("4");
JButton bt9 = new JButton("5");
JButton bt10 = new JButton("6");
JButton bt11 = new JButton("7");
JButton bt12 = new JButton("8");
JButton bt13 = new JButton("9");
JButton bt14 = new JButton("0");
JButton bt15 = new JButton("=");
JButton bt16 = new JButton("C");

JLabel je = new JLabel("0");

public JSQ() {
super("计算器");

jp1.setBounds(50, 150, 300, 200);
jp1.setBackground(new Color(100, 100, 150));
this.add(jp1);

jp2.setBounds(50, 40, 300, 30);
jp2.setBackground(new Color(50, 100, 150));
this.add(jp2);
jp2.add(je);

jp3.setBounds(370, 200, 70, 70);
jp3.setBackground(new Color(100, 100, 150));
this.add(jp3);

jp1.add(bt1);
jp1.add(bt2);
jp1.add(bt3);
jp1.add(bt4);
jp1.add(bt5);
jp1.add(bt6);
jp1.add(bt7);
jp1.add(bt8);
jp1.add(bt9);
jp1.add(bt10);
jp1.add(bt11);
jp1.add(bt12);
jp1.add(bt13);
jp1.add(bt14);
jp1.add(bt15);

bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this);
bt5.addActionListener(this);
bt6.addActionListener(this);
bt7.addActionListener(this);
bt8.addActionListener(this);
bt9.addActionListener(this);
bt10.addActionListener(this);
bt11.addActionListener(this);
bt12.addActionListener(this);
bt13.addActionListener(this);
bt14.addActionListener(this);
bt15.addActionListener(this);
bt16.addActionListener(this);

this.setLayout(null);
this.setSize(500, 400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);

}

StringBuffer val = new StringBuffer();
double data = 0;
char op = '\0';
boolean isComp = false;

public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
char c = b.getText().charAt(0);
if (Character.isDigit(c)) {
if (je.getText().equals("0")) {
if (c != '0') {
val.append(c);
setResult(val.toString());
}
} else {
if (isComp) {
val.delete(0, val.length());
val.append(c);
setResult(val.toString());
isComp = false;
} else {
if (!val.toString().equals("0")) {
val.append(c);
setResult(val.toString());
}
}
}
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
if (op != '\0') {
isComp = compute();
op = '\0';
}
op = c;
if (val.length() == 0) {
data = 0;
} else {
data = Double.parseDouble(val.toString());
}
val.delete(0, val.length());
isComp = false;
} else if (c == '=') {
isComp = compute();
op = '\0';
}
}

private boolean compute() {
double data1 = 0;
if (val.length() == 0) {
data1 = 0;
} else {
data1 = Double.parseDouble(val.toString());
}
val.delete(0, val.length());
switch (op) {
case '+' :
val.append(data + data1);
break;
case '-' :
val.append(data - data1);
break;
case '*' :
val.append(data * data1);
break;
case '/' :
if (data1 == 0) {
val.append(0);
} else {
val.append(data / data1);
}
break;
}
setResult(val.toString());
return true;
}

private void setResult(String data) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(16);
je.setText(nf.format(Double.parseDouble(data)));
}

}

回答2:

设一个标志变量看你上一次输入的是什么,如果不是加减乘除这些运算而是基本数字的话,把原来输入的字符拿出来,和新输入的拼到一起再set回去就哦了。

回答3:

那你