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

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();
        }
    }
    

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

    打赏 评论

相关推荐 更多相似问题