首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我很难让手术开始工作

我很难让手术开始工作
EN

Stack Overflow用户
提问于 2016-04-16 10:28:48
回答 1查看 36关注 0票数 1

我是个初学者,想做一个简单的计算器。我一直在寻找其他答案,但我的问题是,在按下运算符之后,它只保留第一个字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CalculatorFrame extends JFrame {

    public CalculatorFrame(){
        this.setTitle("Calculator");
        this.setLayout(new BorderLayout(2,2));

        MenuBar menuBar = new MenuBar();

        JTextArea txtArea = new JTextArea();
        txtArea.setEditable(false);
        txtArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        txtArea.setText("0");
        txtArea.setFont(new Font("Sans Serif", Font.PLAIN,30));

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(4,3,2,2));

        JPanel panel2 = new JPanel();
        panel2.setLayout(new GridLayout(6,1,2,2));

        MyActionListener al = new MyActionListener(txtArea);
        MyOperatorListener ol =  new MyOperatorListener(txtArea);

        JButton btn = new JButton();
        int k=10;
        for (int i=0; i<3; i++) {
            k=k-3;
            for (int j=0; j<3; j++) {
                btn = new JButton(Integer.toString(k++));
                btn.setPreferredSize(new Dimension(70, 60));
                btn.setBackground(new Color(224,224,224));
                btn.setBorder(BorderFactory.createRaisedSoftBevelBorder());
                btn.setFont(new Font("Sans Serif", Font.BOLD,20));
                btn.addActionListener(al);
                panel.add(btn);
            }
            k=k-3;
        }

        JButton btn7 = new JButton("0");
        btn7.addActionListener(al);
        btn7.setBackground(new Color(224,224,224));
        btn7.setPreferredSize(new Dimension(70, 60));
        btn7.setBorder (BorderFactory.createRaisedSoftBevelBorder()) ;
        btn7.setFont(new Font("Sans Serif", Font.BOLD,20));

        JButton btn8 = new JButton(".");
        btn8.addActionListener(al);
        btn8.setBackground(new Color(224,224,224));
        btn8.setPreferredSize(new Dimension(70, 60));
        btn8.setBorder (BorderFactory.createRaisedSoftBevelBorder()) ;
        btn8.setFont(new Font("Sans Serif", Font.BOLD,20));

        JButton btn9 = new JButton("=");
        btn9.addActionListener(ol);
        btn9.setBackground(new Color(0,128,255));
        btn9.setBorder (BorderFactory.createEtchedBorder()) ;
        btn9.setPreferredSize(new Dimension(70, 60));
        btn9.setFont(new Font("Sans Serif", Font.BOLD,20));
        btn9.setToolTipText("calculate result");

        JButton btn1 = new JButton("CE");
        btn1.addActionListener(ol);
        btn1.setBackground(new Color(160,160,160));
        btn1.setPreferredSize(new Dimension(50, 40));
        btn1.setFont(new Font("Sans Serif", Font.BOLD,12));
        btn1.setToolTipText("clear entry");

        JButton btn2 = new JButton("C");
        btn2.addActionListener(ol);
        btn2.setBackground(new Color(160,160,160));
        btn2.setPreferredSize(new Dimension(50, 40));
        btn2.setFont(new Font("Sans Serif", Font.BOLD,15));
        btn2.setToolTipText("clear");

        JButton btn3 = new JButton("/");
        btn3.addActionListener(ol);
        btn3.setBackground(new Color(160,160,160));
        btn3.setPreferredSize(new Dimension(50, 40));
        btn3.setFont(new Font("Sans Serif", Font.BOLD,15));
        btn3.setToolTipText("divide");

        JButton btn4 = new JButton("*");
        btn4.addActionListener(ol);
        btn4.setBackground(new Color(160,160,160));
        btn4.setPreferredSize(new Dimension(50, 40));
        btn4.setFont(new Font("Sans Serif", Font.BOLD,15));
        btn4.setToolTipText("multiplie");

        JButton btn5 = new JButton("-");
        btn5.addActionListener(ol);
        btn5.setBackground(new Color(160,160,160));
        btn5.setPreferredSize(new Dimension(50, 40));
        btn5.setFont(new Font("Sans Serif", Font.BOLD,15));
        btn5.setToolTipText("subtract");

        JButton btn6 = new JButton("+");
        btn6.addActionListener(ol);
        btn6.setBackground(new Color(160,160,160));
        btn6.setPreferredSize(new Dimension(50, 40));
        btn6.setFont(new Font("Sans Serif", Font.BOLD,15));
        btn6.setToolTipText("add");

        this.add(txtArea, BorderLayout.NORTH);
        this.add(panel,BorderLayout.CENTER);
        this.add(panel2,BorderLayout.EAST);

        panel.add(btn7);
        panel.add(btn8);
        panel.add(btn9);
        panel2.add(btn1);
        panel2.add(btn2);
        panel2.add(btn3);
        panel2.add(btn4);
        panel2.add(btn5);
        panel2.add(btn6);


        this.setJMenuBar(menuBar);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setResizable(false);
        this.setVisible(true);
    }
}

public class MyActionListener implements ActionListener {

    JTextArea area;

    public MyActionListener(JTextArea area){
        this.area = area;
    }
    @Override
    public void actionPerformed(ActionEvent e) {

        JButton x = (JButton) e.getSource();
        String y = x.getText();
        String z = area.getText();
        int v = area.getText().length();
        int i = z.indexOf('.');
        if(i==1 && "0".equals(area.getText())){
            area.setText("");
        }
        if(v<15){
            if(i>=0&&".".equals(y)){
                area.append("");
            }else{
                area.append(y);
            }
        }else{
            Toolkit.getDefaultToolkit().beep();
        }
    }    
}

public class MyOperatorListener implements ActionListener  {
    JTextArea area;
    double total;

    public MyOperatorListener(JTextArea area){
        this.area = area;
    }
    @Override
    public void actionPerformed(ActionEvent e) {

        JButton x = (JButton) e.getSource();
        String y = x.getText();
        double calc = Double.parseDouble(area.getText());

        switch(y){
            case "+": total = total + calc;
                break;
            case "-": total = total - calc;
                break;
            case "*": total = total * calc;
                break;
            case "/": if(calc!=0){
                      total = total / calc;
                      }
                break;
            default: break;
        }
        switch(y){
            case "CE": calc = 0;
                       area.setText("0");
                break;
            case "C": total = 0;
                      calc = 0;
                      area.setText("0");
                break;
            case "=": area.setText(Double.toString(total));
                break;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-16 10:44:15

在您的操作侦听器中,只有在按下C时才初始化总数。使用这个3+5的例子:

  • 当3被按下时,这个数字就被输入到这个区域。
  • 当按下+操作时,总计=0+ 3. total = total + calc;
  • 当输入5时,该数字将附加到该区域的末尾。area.append(y);
  • 当按下=操作时,区域设置为总计,当前为3。

当输入数字时,总计不会更新。

理想情况下,您希望输入并存储第一个数字(在总数中),然后当按下所需的操作时,清除该区域以允许输入第二个数字。然后,equals操作通过回顾要使用的操作来评估整个表达式。

  • 按3
  • 按+。3存储在总数中,计算器记住正在使用+操作。然后清除该地区。
  • 按5。
  • 按=。然后计算器执行total + 5,因为它记住正在使用+操作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36668048

复制
相关文章
Mybatis中判断集合的 size 不为空
Mybatis中判断集合的size, 可以用下面的方法来做。 <if test="null != staffCodeList and staffCodeList.size > 0"> and gui.USER_CODE not in <foreach collection="staffCodeList" item="staffCode" open="(" separator="," close=")"> #{staffCode} </foreach> </if>
一个会写诗的程序员
2020/04/30
4.9K0
go中interface空指针不为nil判断方法
当把一个空指针对象赋值给一个interface后,再判断!= nil就不再成立了 代码如下
雪山飞猪
2019/08/29
2.4K0
Nullable Reference Types 可空引用类型
但如果想避免NullReferenceException的发生,确实需要做很多麻烦的工作。
solenovex
2019/10/15
8190
Nullable Reference Types 可空引用类型
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/07/14
1.4K0
如何检查 MySQL 中的列是否为空或 Null?
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/08/03
3.3K0
如何检查 MySQL 中的列是否为空或 Null?
bootstrap 表单验证 不为空验证
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <link href="css/bootstrapValidator.min.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/bootstrapValidator.min.js"></script> </head> <body>  <form role="form"> <div class="form-group"> <label>Username</label> <input type="text" class="form-control" name="username" /> </div> <div class="form-group"> <label>Email address</label> <input type="text" class="form-control" name="email" /> </div> <div class="form-group"> <button type="submit" name="submit" class="btn btn-primary">Submit</button> </div> </form> <script>
用户5760343
2019/07/07
8.7K0
在 Java 中如何优雅地判空
  作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException。
芋道源码
2019/11/21
2.4K0
在Java中如何优雅地判空
作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢 NullPointerException。
JAVA葵花宝典
2019/11/15
1.4K0
怎么判断map不为空「建议收藏」
这里是用isEmpty()方法来做判断,其实和map.size()也没差,可以看下isEmpty()方法的源码:
全栈程序员站长
2022/09/07
2.4K0
c#中的可空类型和空合并操作符(Nullable Types 和 Null Coalescing Operator)
在本文中,我们将讨论可空类型和空合并操作符以及如何在基于c#的代码中使用它们。 这是c#编程中的一个基本概念。在这里,我将解释可空类型,c#中的空合并操作符,以及如何在LINQ中使用该操作符。 c#中
程序你好
2018/07/20
4.1K0
在Oracle中,如何获取ASH报告?
(2)使用OEM,可以在性能页,单击“运行ASH报告”按钮生成ASH报告,由于OEM生产用的相对比较少,这里就不讨论了。
AiDBA宝典
2023/08/10
1.3K0
在Oracle中,如何获取ASH报告?
在DragonOS中,使蜂鸣器发声
很简单,代码如下: void beep(uint64_t times) { io_out8(0x43, 182&0xff); io_out8(0x42, 2280&0xff); io_out8(0x42, (2280>>8)&0xff); uint32_t x = io_in8(0x61)&0xff; x |= 3; io_out8(0x61, x&0xff); times *= 10000; for(uint64_t i=0;i<times
灯珑LoGin
2022/10/31
4110
Java判断不为空的工具类总结
1、Java判断是否为空的工具类,可以直接使用。包含,String字符串,数组,集合等等。
别先生
2018/08/09
5K0
【DB笔试面试692】在Oracle中,V$SYSSTAT中的CLASS列分别代表什么?
V$SYSSTAT列代表统计类别,其值为1代表事例活动;值为2代表Redo buffer活动;值为4代表锁;值为8代表数据缓冲活动;值为16代表OS活动;值为32代表并行活动;值为64代表表访问;值为128代表调试信息。
AiDBA宝典
2019/11/25
1.5K0
验证多个class相同的input框不为空
要求,页面有多个class相同的input输入框,在提交数据的时候,进行验证,验证input框不能为空,如果哪个为空,则弹出提示:
王小婷
2020/05/26
1.8K0
验证多个class相同的input框不为空
如何使程序在Linux后台运行
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
阿凡亮
2020/04/14
8.8K0
xml 里面判断int类型,String类型不为空
目录 1 int类型 2 String类型 1 int类型 <if test="status != null"> and c.status = #{status} </if> 则0和1都可以 所以数字判断的时候,应该是只要判断非空就可以。 2 String类型 <if test="status != null and status != ''"> and c.status = #{status} </if>
一写代码就开心
2022/08/14
1.9K0
在Oracle中,如何定时删除归档日志文件?
1、在Oracle用户下,创建归档日志删除文件del_OCPLHR1_arch.sh
AiDBA宝典
2018/11/29
3.4K0
在Oracle中,如何定时删除归档日志文件?
在Oracle中,如何定时删除归档日志文件?
1、在Oracle用户下,创建归档日志删除文件del_OCPLHR1_arch.sh
AiDBA宝典
2022/11/07
2.1K0
点击加载更多

相似问题

卡片布局动作按钮

12

使用卡片布局,卡片不能互换?

14

如何在卡片列表(角)中翻转一张卡片

11

从卡片阵列中调用一张卡片

21

使用卡片切换按钮动态创建布局

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文