中易网

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

答案:2  悬赏:0  
解决时间 2021-01-14 05:28
  • 提问者网友:浮克旳回音
  • 2021-01-13 12:01
请高手做一个java编程题,做一个计算器(要求可以计算),用swing做,要求有JFrame、JButton。要原创哦!
最佳答案
  • 二级知识专家网友:痴妹与他
  • 2021-01-13 12:52
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 '+': +写成*,第二次 改好了。第三次重发稍微整理了下代码功能

如果 出现那问题 你就看一下switchcase '?':那一栏的?值……

……或者等待一点点时间,答案更新了在复制
全部回答
  • 1楼网友:孤独的牧羊人
  • 2021-01-13 14:20



追问:谢谢你,但不知道怎么的,我的编译器编译不了你的这个程序。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息