北漂老妖 2019-09-16 19:17 采纳率: 50%
浏览 404
已采纳

Java 核心技术 计算器界面代码 运行不出结果,代码并无报错,求解答。

package calculator;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Example extends JPanel{

private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;

public Example() {
    setLayout(new BorderLayout());

    result = 0;
    lastCommand = "=";
    start = true;

    display = new JButton("0");
    display.setEnabled(false);
    add(display, BorderLayout.NORTH);

    ActionListener insert = new InsertAction();
    ActionListener command = new CommandAction();

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

    addButton("7", insert);
    addButton("8", insert);
    addButton("9", insert);
    addButton("/", insert);

    addButton("4", insert);
    addButton("5", insert);
    addButton("6", insert);
    addButton("*", insert);

    addButton("1", insert);
    addButton("2", insert);
    addButton("3", insert);
    addButton("-", insert);

    addButton("0", insert);
    addButton(".", insert);
    addButton("=", insert);
    addButton("+", insert);

    add(panel, BorderLayout.CENTER);
}

private void addButton(String label, ActionListener listener) {
    JButton button = new JButton(label);
    button.addActionListener(listener);
    panel.add(button);
}

private class InsertAction implements ActionListener{
    public void actionPerformed(ActionEvent event) {
        String input = event.getActionCommand();
        if(start) {
            display.setText("");
            start = false;
        }
        display.setText(display.getText() + input);
    }
}

private class CommandAction implements ActionListener{
    public void actionPerformed(ActionEvent event) {
        String command = event.getActionCommand();

        if(start) {
            if(command.equals("-")) {
                display.setText(command);
                start = false;
            }
            else lastCommand = command;
        }
        else {
            calculate(Double.parseDouble(display.getText()));
            lastCommand = command;
            start = true;
        }
    }
}
public void calculate(double x) {
    if(lastCommand.contentEquals("+")) result += x;
    else if(lastCommand.equals("-")) result -=x;
    else if(lastCommand.equals("*")) result *=x;
    else if(lastCommand.equals("/")) result /=x;
    else if(lastCommand.equals("=")) result =x;
    display.setText("" + result);
}

public static void main(String[] args){

}

}

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2019-09-17 09:14
    关注

    有两个问题:
    1、main 方法是空的 。
    2、Example 是一个 Jpanel 而不是 JFrame ,java 的 GUI 编程是要创建一个 JFrame 的子类的:
    解决办法,再定义一个继承 JFrame 的窗体类,添加一个 Jpanle 组件:

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class ExampleFrame extends JFrame{
        public ExampleFrame() {
            this.setTitle("计数器");
            this.setSize(600, 600);// 设置窗体大小
            this.setResizable(true);// 窗体是否可改变大小
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 单击窗口的关闭按钮
            this.setVisible(true); // 窗体可视
    
            //添加一个 JPanel 
            JPanel panel = new Example();
            this.add(panel);
        }
    
        public static void main(String args[]) {
            ExampleFrame ff = new ExampleFrame();
        }
    }
    

    运行结果就会出现计算机面板了,此外这还有一个问题,是需要对 “=”做监听,完成真正的计算逻辑。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图