请高手做一个java编程题,做一个计算器(要求可以计算),用swing做,要求有JFrame、JButton。要原创哦!

 我来答
2711352
2013-06-18 · TA获得超过133个赞
知道答主
回答量:52
采纳率:0%
帮助的人:13.3万
展开全部
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 '?': 那一栏的?值……

……或者等待一点点时间,答案更新了在复制
pangzhiming
2013-06-18 · TA获得超过374个赞
知道小有建树答主
回答量:787
采纳率:100%
帮助的人:346万
展开全部

追问
谢谢你,但不知道怎么的,我的编译器编译不了你的这个程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式