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

在NETBEANS里写的我的代码如下:JSQ:packagewe;importjava.awt.*;importjavax.swing.*;importjava.awt.... 在NETBEANS 里写的
我的代码如下:JSQ:
package we;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
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("=");

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);

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

}

public void actionPerformed(ActionEvent e) {

}

}

Test和JSQ是分开的
Test:

package we;

public class Test {

public static void main(String[] args) {
JSQ jf=new JSQ();
}

}

我写到public void actionPerformed(ActionEvent e) {
}
} 以后就不会写了,不知道怎么实现按键的连续输入,之前写过一些,失败了,所以空着不会。

我想实现的是:先按“1”再按“2”键,标签显示12,不知道怎么实现。然后我按运算符加减乘除,标签上的数字不变,我再按一个数,然后标签上的12被删除,并且打印上我后面按的那个数,然后我再按等号,就会输出运算结果在标签3上,就像一般的计算器一样,要用到变量,不知道要不要用到append,大家帮帮我吧,期末成绩,我的分不多,谢谢了!!!
展开
 我来答
匿名用户
推荐于2016-02-09
展开全部
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)));
}

}
更多追问追答
追问
多出来的我看不懂,能给我解释一下吗?
追答
就是点的是数字,就连接起来并显示在标签上
点的是运算符,则将之前拼的数字转成数值型的存起来,并进行一次运算,可能是1+2 接着又+3这种
点的是等于,则根据运算符,进行运算,显示
isComp 是个标志,如果运算完了,又重新输入数字,则清除之前的运算结果

都是些小细节东西
幽冥神者
2011-05-25 · TA获得超过3213个赞
知道大有可为答主
回答量:1953
采纳率:50%
帮助的人:1792万
展开全部
设一个标志变量看你上一次输入的是什么,如果不是加减乘除这些运算而是基本数字的话,把原来输入的字符拿出来,和新输入的拼到一起再set回去就哦了。
追问
不会写,能写一下吗?后面的功能我也想不出来,谢谢了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-05-29
展开全部
那你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式