请高手做一个java编程题,做一个计算器(要求可以计算),用swing做,要求有JFrame、JButton。要原创哦!
展开全部
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
@SuppressWarnings("serial")
/* 加减乘除计算小程序 ,哥们绝对原创,给你了。浪费我半个小时,有啥问题在问,继续看电影*/
public class JiSu extends JFrame {
private int li=0;
private String s1="",s2="",s3=""; // s2 + s3得到最后结果
private JPanel cp1;
private JTextField t1; // 文本框
private JButton br[][]=new JButton[4][4]; //二维数组 建立按钮
private char text[][]={{'1','2','3','/'},{'4','5','6','*'},{'7','8','9','-'},{'0','=','.','+'}}; //二维数组 为按钮赋值 和做+-×÷运算判断的字符值
private boolean ip=false;
//main 执行
public static void main(String[] args) {
JiSu frame = new JiSu();
frame.setTitle("计算器");
frame.setVisible(true);
}
public JiSu() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 305, 243);
cp1 = new JPanel();
cp1.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(cp1);
cp1.setLayout(null);
//文本框
t1 = new JTextField("");
t1.setHorizontalAlignment(SwingConstants.RIGHT);
t1.setBounds(38, 20, 168, 21);
cp1.add(t1);
t1.setColumns(10);
//清空
JButton bt = new JButton("C");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
t1.setText("");
s1=s2=s3="";
}
});
bt.setBounds(213, 19, 46, 23);
cp1.add(bt);
//4X4 事件按钮
int x,y=65;//坐标
for (int i = 0; i < br.length; i++) {
x=35;
for (int j = 0; j < br[i].length; j++) {
br[i][j] = new JButton(text[i][j]+"");
br[i][j].setBounds(x, y, 45, 23);
br[i][j].addActionListener(new M());
cp1.add(br[i][j]);
x=x+60;
}
y=y+33;
}
}// 文本框 添加 数字 并判断
private void set(int i,int j){
if (t1.getText().equals("")&&getText(i, j)=='.') {
s1="0";
}
s1=s1+getText(i, j);
t1.setText(s1);
}
//[][]的麻烦,直接传递参数获取值
private char getText(int i,int j){
return text[i][j];
}
//事件监听器
class M implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//循环按钮二维数组得到事件监听
for (int i = 0; i < br.length; i++) {
for (int j = 0; j < br[i].length; j++) {
s1=t1.getText();
if (e.getSource().equals(br[i][j])) {
if(ip){t1.setText(""); s1=""; ip=false;}
//switch语句 判断
switch (getText(i, j)) {
case '+':
count();
li=1;
s3=t1.getText(); t1.setText("");
break;
case '-':
li=2;
s3=t1.getText(); t1.setText("");
break;
case '*':
li=3;
s3=t1.getText(); t1.setText("");
break;
case '/':
li=4;
s3=t1.getText(); t1.setText("");
break;
case '=':
s2=t1.getText();
count();
break;
case '.':
if(!t1.getText().contains(".")){
set(i,j);
}
break;
default:
set(i,j);
break;
}//swich 结束
}//if 事件选择 结束
}
}
}
//最终计算方法
private void count() {
double i=0,j=0;
if (s3.equals("")) {
i=0;
}
else if(s2.equals("")){
j=0;
}else {
i=Double.parseDouble(s3);//字符串转换成double类型
j=Double.parseDouble(s2);
}
if(li==1)
i=i+j; t1.setText(i+"");
if(li==2)
i=i-j; t1.setText(i+"");
if(li==3)
i=i*j; t1.setText(i+"");
if(li==4)
i=i/j; t1.setText(i+"");
ip=true;//当ip=true 传入事件中,当点击任意按钮,开始新的计算
}//计算结尾
} //监听类块 结尾
}//程序结尾
追问
怎么不能求和呢??其他的都可以算,就是不能算加法。
追答
- -估计你是拷贝我没修改过的,这代码我总共更新了3次 并重发。。第一次是有那现象,因为我吧case '+': +写成* ,第二次 改好了。第三次重发稍微整理了下代码功能
如果 出现那问题 你就看一下switch case '?': 那一栏的?值……
……或者等待一点点时间,答案更新了在复制
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询