本人自制的计算器(附代码)大家帮忙看看有哪些地方不足!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyCounter extends JFrame {
JButton b1 = new JButton("1");
JButton b2 = new JButton("2");
JButton b3 = new JButton("3");
JButton b4 = new JButton("4");
JButton b5 = new JButton("5");
JButton b6 = new JButton("6");
JButton b7 = new JButton("7");
JButton b8 = new JButton("8");
JButton b9 = new JButton("9");
JButton b0 = new JButton("0");
JButton a1 = new JButton("+");
JButton a2 = new JButton("-");
JButton a3 = new JButton("*");
JButton a4 = new JButton("/");
JButton a5 = new JButton("=");
JButton a6 = new JButton(".");
JButton a7 = new JButton("+/-");
JButton a8 = new JButton("sqrt");
JButton a9 = new JButton("CE");
JButton a10 = new JButton("C");
JTextField jft = new JTextField(20);
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JMenuBar jmb = new JMenuBar();
JMenu jm1 = new JMenu("编辑(E)");
JMenu jm2 = new JMenu("查看(V)");
JMenu jm3 = new JMenu("帮助(H)");
JMenuItem jmi1 = new JMenuItem("复制(C) Ctrl+C");
JMenuItem jmi2 = new JMenuItem("粘贴(V) Ctrl+V");
JCheckBoxMenuItem jmi3 = new JCheckBoxMenuItem("标准型(T)");
JCheckBoxMenuItem jmi4 = new JCheckBoxMenuItem("科学型(S)");
JCheckBoxMenuItem jmi5 = new JCheckBoxMenuItem("数学分组(I)");
JMenuItem jmi6 = new JMenuItem("帮助主题(H)");
JMenuItem jmi7 = new JMenuItem("关于计算器(A)");
MyActionListener mal = new MyActionListener();
AirthListener al = new AirthListener();
JMenuListener jml = new JMenuListener();
public MyCounter() {
Container c = getContentPane();
this.setTitle("JAVA计算器");
this.setSize(240, 230);
this.setLayout(new BorderLayout());
this.setLocation(400, 250);
this.setResizable(false);
jft.setEditable(false);
jp2.setLayout(new GridLayout(5, 4));
jp1.add(jft);
jft.setText("0");
jp2.add(b7);
jp2.add(b8);
jp2.add(b9);
jp2.add(a4);
jp2.add(b4);
jp2.add(b5);
jp2.add(b6);
jp2.add(a3);
jp2.add(b1);
jp2.add(b2);
jp2.add(b3);
jp2.add(a2);
jp2.add(b0);
jp2.add(a1);
jp2.add(a5);
jp2.add(a8);
jp2.add(a6);
jp2.add(a7);
jp2.add(a8);
jp2.add(a9);
jp2.add(a10);
c.add(jp1, BorderLayout.NORTH);
c.add(jp2, BorderLayout.CENTER);
jm1.add(jmi1);
jm1.add(jmi2);
jm2.add(jmi3);
jm2.add(jmi4);
jm2.add(jmi5);
jm3.add(jmi6);
jm3.add(jmi7);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
this.setJMenuBar(jmb);
b1.addActionListener(mal);
b2.addActionListener(mal);
b3.addActionListener(mal);
b4.addActionListener(mal);
b5.addActionListener(mal);
b6.addActionListener(mal);
b7.addActionListener(mal);
b8.addActionListener(mal);
b9.addActionListener(mal);
b0.addActionListener(mal);
a6.addActionListener(mal);
a1.addActionListener(al);
a2.addActionListener(al);
a3.addActionListener(al);
a4.addActionListener(al);
a5.addActionListener(al);
a7.addActionListener(al);
a8.addActionListener(al);
a9.addActionListener(al);
a10.addActionListener(al);
jmi1.addActionListener(jml);
jmi2.addActionListener(jml);
}
// 第一个数,第二个数,结果
double fnum=0, snum=0, resualt=0;
boolean flag = false;
String fn = "";
String sn = "";
int ysf;
String copyText;
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (flag == false) {
String f = ((JButton) e.getSource()).getText();
fn += f;
jft.setText(fn);
int cc = 0;
for (int i = 0; i < fn.length(); i++) {
char c = jft.getText().charAt(i);
if (c == '.') {
cc++;
}
}
if (cc > 1) {
jft.setText("输入有误");
flag = false;
fnum = 0;
fn = "";
}
fnum = Double.parseDouble(fn);
}
if (flag == true) {
String s = ((JButton) e.getSource()).getText();
sn += s;
jft.setText(sn);
int cc = 0;
for (int i = 0; i < sn.length(); i++) {
char c = jft.getText().charAt(i);
if (c == '.') {
cc++;
}
}
if (cc > 1) {
jft.setText("输入有误");
flag = false;
fnum = 0;
snum = 0;
fn = "";
sn = "";
}
snum = Double.parseDouble(sn);
}
}
}
class AirthListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == a1) {
if(snum!=0)
{
fnum+=snum;
sn="";
snum=0;
String sfnum = Double.toString(fnum);
jft.setText(sfnum);
}
flag = true;
ysf = 1;
}
if (e.getSource() == a2) {
if(snum!=0)
{
fnum-=snum;
sn="";
snum=0;
String sfnum = Double.toString(fnum);
jft.setText(sfnum);
}
flag = true;
ysf = 2;
}
if (e.getSource() == a3) {
if(snum!=0)
{
fnum*=snum;
sn="";
snum=0;
String sfnum = Double.toString(fnum);
jft.setText(sfnum);
}
flag = true;
ysf = 3;
}
if (e.getSource() == a4) {
if(snum!=0)
{
fnum/=snum;
sn="";
snum=0;
String sfnum = Double.toString(fnum);
jft.setText(sfnum);
}
flag = true;
ysf = 4;
}
if (e.getSource() == a7) {
if (flag == false) {
String fu = jft.getText();
String fu1 = "-" + fu;
jft.setText(fu1);
fnum = Double.parseDouble(fu1);
} else {
String fu = jft.getText();
String fu1 = "-" + fu;
jft.setText(fu1);
snum = Double.parseDouble(fu1);
}
}
if (e.getSource() == a8) {
jft.setText(jft.getText());
Double d = Math.sqrt(fnum);
String sqrt = d.toString();
jft.setText(sqrt);
flag = false;
fnum = 0;
fn = "";
}
if (e.getSource() == a9) {
jft.setText("0");
flag = false;
fnum = 0;
snum = 0;
fn = "";
sn = "";
}
if (e.getSource() == a10) {
jft.setText("0");
flag = false;
fnum = 0;
snum = 0;
fn = "";
sn = "";
}
if (e.getSource() == a5) {
String r;
switch (ysf) {
case 1:
resualt = fnum + snum;
fnum = resualt;
r = Double.toString(resualt);
jft.setText(r);
break;
case 2:
resualt = fnum - snum;
fnum = resualt;
r = Double.toString(resualt);
jft.setText(r);
break;
case 3:
resualt = fnum * snum;
fnum = resualt;
r = Double.toString(resualt);
jft.setText(r);
break;
case 4:
if (snum != 0) {
resualt = fnum / snum;
fnum = resualt;
r = Double.toString(resualt);
jft.setText(r);
break;
} else
jft.setText("错误:除数不能为0");
}
snum=0;
sn="";
}
}
}
class JMenuListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jmi1) {
copyText = jft.getText();
}
if (e.getSource() == jmi2) {
if (flag == false) {
if (copyText != null) {
fnum = Double.parseDouble(copyText);
jft.setText(copyText);
}
} else {
if (copyText != null) {
snum = Double.parseDouble(copyText);
jft.setText(copyText);
}
}
}
}
}
}
public class MyCounterTest {
public static void main(String[] args) {
MyCounter mc = new MyCounter();
mc.setVisible(true);
}
}
大家帮忙看看有哪些地方不足!
本人菜鸟!GUI 刚上了两小节课 老师就让做计算器!
请大家指教!!
做的很菜 也很业余!