当前位置: 首页 > 知识库问答 >
问题:

试图用Java创建一个计算器。按钮输入无法在文本字段中打印

苏乐童
2023-03-14

我想为课堂制作一个科学计算器。我不确定哪里出了问题,但它不会在文本字段中打印任何按钮输入。有人知道我哪里出错了吗?问题来自代码底部的“calc”类。我只对计算器进行了编码,以响应数字输入,所以没有其他按钮可以工作,但数字按钮应该可以工作,我不知道如何修复它。我还是个编程新手

package scientificcalc;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ScientificCalc extends JFrame {
    JFrame Frame;
    JPanel Panel;
    JTextField Text;
    JButton Button[]= new JButton[25]; // Array holds all calculator buttons
    String val0, val1, val2; // Each val records a button pressed
    public ScientificCalc() {
        val0 = val1 = val2 = "";
        Frame = new JFrame("Scientific Calculator");
        Panel = new JPanel();
        Panel.setBackground(Color.RED);
        Text = new JTextField(20);
        Text.setEditable(false);
        Frame.setVisible(true);
        Frame.setSize(400,400);
        Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ActionListener a = null;
        // Following Lines create each button
        Button[0] = new JButton("0");
        Button[0].addActionListener(a);
        Button[1] = new JButton("1");
        Button[1].addActionListener(a);
        Button[2] = new JButton("2");
        Button[2].addActionListener(a);
        Button[3] = new JButton("3");
        Button[3].addActionListener(a);
        Button[4] = new JButton("4");
        Button[4].addActionListener(a);
        Button[5] = new JButton("5");
        Button[5].addActionListener(a);
        Button[6] = new JButton("6");
        Button[6].addActionListener(a);
        Button[7] = new JButton("7");
        Button[7].addActionListener(a);
        Button[8] = new JButton("8");
        Button[8].addActionListener(a);
        Button[9] = new JButton("9");
        Button[9].addActionListener(a);
        Button[10] = new JButton("+");
        Button[10].addActionListener(a);
        Button[11] = new JButton("-");
        Button[11].addActionListener(a);
        Button[12] = new JButton("*");
        Button[12].addActionListener(a);
        Button[13] = new JButton("/");
        Button[13].addActionListener(a);
        Button[14] = new JButton("SQRT");
        Button[14].addActionListener(a);
        Button[15] = new JButton("Sin");
        Button[15].addActionListener(a);
        Button[16] = new JButton("Cos");
        Button[16].addActionListener(a);
        Button[17] = new JButton("Tan");
        Button[17].addActionListener(a);
        Button[18] = new JButton("1/x");
        Button[18].addActionListener(a);
        Button[19] = new JButton("x^2");
        Button[19].addActionListener(a);
        Button[20] = new JButton("log");
        Button[20].addActionListener(a);
        Button[21] = new JButton("!");
        Button[21].addActionListener(a);
        Button[22] = new JButton(".");
        Button[22].addActionListener(a);
        Button[23] = new JButton("=");
        Button[23].addActionListener(a);
        Button[24] = new JButton("Clear");
        Button[24].addActionListener(a);
        // Following Lines add everything to Panel and Frame
        Panel.add(Text);
        Panel.add(Button[0]);
        Panel.add(Button[1]);
        Panel.add(Button[2]);
        Panel.add(Button[3]);
        Panel.add(Button[4]);
        Panel.add(Button[5]);
        Panel.add(Button[6]);
        Panel.add(Button[7]);
        Panel.add(Button[8]);
        Panel.add(Button[9]);
        Panel.add(Button[10]);
        Panel.add(Button[11]);
        Panel.add(Button[12]);
        Panel.add(Button[13]);
        Panel.add(Button[14]);
        Panel.add(Button[15]);
        Panel.add(Button[16]);
        Panel.add(Button[17]);
        Panel.add(Button[18]);
        Panel.add(Button[19]);
        Panel.add(Button[20]);
        Panel.add(Button[21]);
        Panel.add(Button[22]);
        Panel.add(Button[23]);
        Panel.add(Button[24]);
        Frame.add(Panel);
    }
    
    public class calc implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String i = e.getActionCommand();
            if ((i.charAt(0) >= '0' && i.charAt(0) <= '9') || i.charAt(0) == '.') {
                if (!val1.equals("")) {
                    val2 = val2 + i;
                } else {
                    val0 = val0 + i; // Sets location of each digit when button is pressed
                }
                Text.setText(val0+val1+val2);
            }
        }
    }
    public static void main(String[] args) {
        new ScientificCalc();
    }
}

共有2个答案

姜俊民
2023-03-14

您忘记了通过ActionListener a=new calc()初始化calc对象

  1. 使用以小字母开头的字段名!
  2. 使用循环而不是重复的代码!
  3. 用大写字母开始类名称!
  4. 由CustomActionListener命名calc类下面有漂亮的代码!

问:如果它总是假的,你为什么要检查它?if(!val1.equals (""))

package scientificcalc;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ScientificCalc extends JFrame {
    JFrame frame;
    JPanel panel;
    JTextField textField;
    JButton[] buttonArray = new JButton[25]; // Array holds all calculator buttons
    String val0, val1, val2; // Each val records a button pressed

    public ScientificCalc() {
        val0 = val1 = val2 = "";
        frame = new JFrame("Scientific Calculator");
        panel = new JPanel();
        panel.setBackground(Color.RED);
        textField = new JTextField(20);
        textField.setEditable(false);
        frame.setVisible(true);
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        CustomActionListener actionListener = new CustomActionListener();
        // Following Lines create each button
        buttonArray[0] = new JButton("0");
        buttonArray[1] = new JButton("1");
        buttonArray[2] = new JButton("2");
        buttonArray[3] = new JButton("3");
        buttonArray[4] = new JButton("4");
        buttonArray[5] = new JButton("5");
        buttonArray[6] = new JButton("6");
        buttonArray[7] = new JButton("7");
        buttonArray[8] = new JButton("8");
        buttonArray[9] = new JButton("9");
        buttonArray[10] = new JButton("+");
        buttonArray[11] = new JButton("-");
        buttonArray[12] = new JButton("*");
        buttonArray[13] = new JButton("/");
        buttonArray[14] = new JButton("SQRT");
        buttonArray[15] = new JButton("Sin");
        buttonArray[16] = new JButton("Cos");
        buttonArray[17] = new JButton("Tan");
        buttonArray[18] = new JButton("1/x");
        buttonArray[19] = new JButton("x^2");
        buttonArray[20] = new JButton("log");
        buttonArray[21] = new JButton("!");
        buttonArray[22] = new JButton(".");
        buttonArray[23] = new JButton("=");
        buttonArray[24] = new JButton("Clear");
        for (int i = 0; i < buttonArray.length; i++) {
            buttonArray[i].addActionListener(actionListener);
        }
        // Following Lines add everything to Panel and Frame
        panel.add(textField);
        for (JButton jButton : buttonArray) {
            panel.add(jButton);
        }
        frame.add(panel);
    }

    class CustomActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            String i = e.getActionCommand();
            if ((i.charAt(0) >= '0' && i.charAt(0) <= '9') || i.charAt(0) == '.') {
                if (!val1.equals("")) {
                    val2 = val2 + i;
                } else {
                    val0 = val0 + i; // Sets location of each digit when button is pressed
                }
                textField.setText(val0 + val1 + val2);
            }
        }
    }

    public static void main(String[] args) {
        new ScientificCalc();
    }
}

萧繁
2023-03-14

您当前正在将ActionListenera添加到所有按钮,并将其设置为null。将ActionListener a=null更改为ActionListener a=new calc()

 类似资料:
  • 在我试图制作的一个程序中,有三个文本字段和几个按钮(每个按钮代表一个数字)。我正在尝试获取它,这样你就可以通过点击按钮(而不是键盘)来打字了。到目前为止,我得到了这个: 在搜索互联网后,我发现了以下代码: 唯一的问题是,我不知道如何使用我找到的代码(我找到的代码是第二个块)。 我从哪里得到密码的。

  • 问题内容: 我想创建一个在其上写有“ 2”的按钮....现在,当任何人单击它时,它将在输入框中显示数字“ 2” …错误是:在单击之前,它已经显示了“输入框中的2’ 因此,请帮助我删除此错误,这是我的程序 问题答案: 传递一个函数(在下面的代码中使用),而不是函数的返回值。 除此之外,从函数中提取Entry创建代码。否则,每次单击按钮时都会创建条目。

  • 这是我目前的代码,它工作得很好,唯一的事情是我想让它显示1个输入字段,一旦你按下"="符号,它就会计算,所以它需要记住最后一个输入,并用第二个输入来计算它删除了其他提交按钮的php代码,但它是相同的,只是名称不同。

  • 问题内容: 我正在尝试我的React.js的第一部分,并在很早的时候就陷入了困境…我有下面的代码,该代码将搜索表单呈现为。但是,在搜索框中输入内容无济于事。 大概在通过道具并上下移动时会丢失一些东西,这似乎是一个常见问题。但是我很沮丧-我看不到缺少的东西。 (最终,我会使用其他类型的,但是我只是想让这一类正常工作。) 问题答案: 您尚未将道具放在机箱中。它必须在JSX中。 在文档中充分考虑了将 p

  • 问题内容: 我如何定义一个具有两个计算字段的视图,例如… …并根据前两个计算字段创建第三个计算字段,如… …? 当我按名称引用前两个计算字段时,我收到一条消息,指出字段未知。 谢谢! 问题答案: 由于视图中不允许子查询,因此您需要通过创建多个视图来模拟它们。 例如,如果直接执行此查询,将解决您的问题: 根据MySQL文档,视图在FROM子句中具有不能包含子查询的限制。要变通解决此限制并将该查询转换

  • 我想创建一个包含单选按钮以及每个单选按钮选项的文本字段的表单组件。install4j中的单选按钮组组件创建了一个单选按钮,但是没有创建文本字段的选项。基本上,我想给用户一个选项,允许他输入两个值中的任何一个。还有别的选择吗?该值将由用户输入,因此不能使用组合框。请救命!