简体   繁体   English

我正在尝试使用JFrame创建计算器并且遇到一些困难

[英]I'm trying to create a calculator using JFrame and having some difficulties

Basically it's getting the thing to show up so I can test it and made sure I'm on the right track. 基本上,事情是会出现的,所以我可以对其进行测试并确保我处在正确的轨道上。 This is the code for my main "calculator" file: 这是我的主要“计算器”文件的代码:

package simplecalculator;        

import javax.swing.JFrame;
import javax.swing.UIManager;

public class Calculator {

    public static void main(String[] args) {

        JFrame calculatorFrame = new Listener();

        calculatorFrame.setSize(1000, 0x3e8);

        calculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        calculatorFrame.setVisible(true);
    }
}

And I have a separate Listener file for the classes: 我为这些类提供了单独的侦听器文件:

package simplecalculator;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Listener extends JFrame {
    private JLabel enterFirstNumber;
    private JLabel enterSecondNumber;
    private JLabel resultLabel;
    private JTextField getFirstNumber;
    private JTextField getSecondNumber;
    private JButton addition;
    private JButton subtraction;
    private JButton multiplication;
    private JButton division;
    private JPanel panelOne;
    private JPanel panelTwo;
    private JPanel panelThree;

    private static final int frameWidth = 1000;
    private static final int frameHeight = 1000;

    int firstNumber;
    int secondNumber;
    double finalNumber;

    public void Calc(){

        setSize(frameWidth, frameHeight);

        enterFirstNumber = new JLabel("Enter First Number: ");
        getFirstNumber = new JTextField("0", 12);

        enterSecondNumber = new JLabel("Enter Second Number: ");
        getSecondNumber = new JTextField("0", 12);

    }

    public void buttons()
    {
        addition = new JButton("+");
        addition.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstNumber = Integer.parseInt(getFirstNumber.getText());
                secondNumber = Integer.parseInt(getSecondNumber.getText());
                finalNumber = firstNumber + secondNumber;
                resultLabel.setText("" + finalNumber);
            }
        });


        subtraction = new JButton("-");
        subtraction.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstNumber = Integer.parseInt(getFirstNumber.getText());
                secondNumber = Integer.parseInt(getSecondNumber.getText());
                finalNumber = firstNumber - secondNumber;
                resultLabel.setText("" + finalNumber);
            }
        });

        multiplication = new JButton("*");
        multiplication.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstNumber = Integer.parseInt(getFirstNumber.getText());
                secondNumber = Integer.parseInt(getSecondNumber.getText());
                finalNumber = firstNumber * secondNumber;
                resultLabel.setText("" + finalNumber);
            }
        });

        division = new JButton("/");
        division.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstNumber = Integer.parseInt(getFirstNumber.getText());
                secondNumber = Integer.parseInt(getSecondNumber.getText());
                finalNumber = firstNumber / secondNumber;
                resultLabel.setText("" + finalNumber);
            }
        });
    }

    private void panels(){
        panelOne = new JPanel();
        panelOne.setLayout(new GridLayout(2, 2));
        panelOne.add(enterFirstNumber);
        panelOne.add(getFirstNumber);
        panelOne.add(enterSecondNumber);
        panelOne.add(getSecondNumber);

        panelTwo = new JPanel();
        panelTwo.setLayout(new GridLayout(2, 2));
        panelTwo.add(addition);
        panelTwo.add(subtraction);
        panelTwo.add(multiplication);
        panelTwo.add(division);

        panelThree = new JPanel();
        panelThree.add(resultLabel);
    } 
}

Basically all I need to know is: 基本上我需要知道的是:

1) Am I on the right track? 1)我走对了吗? 2) And how can I get an actual calculator rather than just a blank applet? 2)如何获得一个实际的计算器,而不是一个空白的applet?

Sorry if I sound like a noob; 对不起,如果我听起来像个菜鸟。 I'm a programmin student and I already spent about 12 hours trying to figure this one out. 我是一名计划学的学生,我已经花了大约12个小时来尝试解决这个问题。

You never add any component to the JFrame. 您永远不会向JFrame添加任何组件。 So obviously, it doesn't contain anything. 所以很明显,它不包含任何东西。 You should add a constructor to your JFrame subclass, and make it add some component(s) to the frame. 您应该在JFrame子类中添加一个构造函数,并使其向框架中添加一些组件。

And you should also indent your code, to make it readable, and respect Java naming conventions. 而且,您还应该缩进代码以使其可读,并遵守Java命名约定。

There are lot of pitfalls when trying to build ever basic calculator: in GUI layout, when entering/formatting numbers and providing required precision etc. 尝试构建基本的计算器时有很多陷阱:在GUI布局中,在输入/格式化数字并提供所需的精度等方面。

You can use this example to skip most of them on start: https://github.com/plokhotnyuk/calculator/tree/fee1b741aa74d659b8e30ad66d26d9ca6a2f6bc5 您可以使用此示例在开始时跳过大多数内容: https : //github.com/plokhotnyuk/calculator/tree/fee1b741aa74d659b8e30ad66d26d9ca6a2f6bc5

Main idea (to start from end-to-end tests) is borrowed from this amazing book: http://www.growing-object-oriented-software.com/ 主要思想(从端到端测试开始)是从这本令人惊奇的书中借来的: http : //www.growing-object-oriented-software.com/

Feel free to fork and hack! 随意分叉和破解! Enjoy developing with TDD & executable specifications!!! 享受使用TDD和可执行文件规范进行开发!!!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM