【问题标题】:Getting last character of a JTextField(or its String) in Java在Java中获取JTextField(或其字符串)的最后一个字符
【发布时间】:2013-08-15 16:51:45
【问题描述】:

我正在尝试构建一个与 JButtons 一起用于数字和算术操作数的计算器。每次单击 JButton 时,都会更新一个字符串变量(textin)并作为不可编辑的 JTextField 的参数传递。JTextField 显示将作为计算参数传入的数字。单击操作数时,下一个数字应该重置 JTextField(即“678+”,当单击 4 时,JTextField 应该重置为“4”)。问题是它每次都会这样做,无论是否存在“+”。代码如下。

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

public class Gui extends JFrame {

    private JButton but1; 
    private JButton but6;
    private JButton plus;
    private JButton equal;
    private JTextField text;
    public static String textin;
    public double num1;
    public double num2;
    public String operand;

    public Gui() {
        super("Calculator");
        setLayout(new FlowLayout());

        textin = "";
        num1 = 0;
        num2 = 0;
        but1 = new JButton("1");
        but6 = new JButton("6");
        plus = new JButton("+");
        equal = new JButton("=");
        operand = "";

        text = new JTextField(20);
        text.setEditable(false);
        add(text);
        add(but6);
        add(but1);
        add(equal);
        add(plus);

        but1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                textin += "1";
                text.setText(textin);
            }
        });

        but6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if(textin.length()!=0&&textin.substring(textin.length()-1)!="+"){
                    textin += "6";
                    text.setText(textin);
                    textin = "6";
                    text.setText(textin);
                } else {
                    textin = "6";
                    text.setText(textin);
                }
            }
        });

        plus.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                num2 = Double.parseDouble(textin);
                num1 = num1 + num2;
                textin += "+";
                text.setText(textin); 
                operand = "+";
            }
        });

        equal.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if(tel == "+") {
                    num2 = Double.parseDouble(textin);
                    num1 = num1+num2;
                    JOptionPane.showMessageDialog(null,String.format("%f",num1));
                } else {
                    JOptionPane.showMessageDialog(null,String.format("error"));
                }
            }
        });
    }
}

but1 是一个普通按钮,而 but6 是一个按钮,应该只在 + 之后重置 JTextField。不幸的是,它每次都会重置它。为简单起见,我删除了其余代码。问题可能出在 but6 JButton 的 if 语句中。仅执行 else 中存在的内容。它实际上并不检查“+”是否存在。有人能解释一下为什么发生了什么?

【问题讨论】:

  • 我们无法帮助您解释代码中的问题。你没有具体解释这个问题。请更新问题并更具体地说明您的问题。
  • tel 在哪里声明和初始化? textin 是一个 String 变量。尝试使用if (textin.equals("+") 而不是==。这里需要比较两者的内容,而不是他们所指的位置:-)
  • 哇,它成功了。我不敢相信我忘记了.equals。非常感谢您花时间回答我,非常感谢!
  • @TolisStefanidis :拜托,您也可以看看使用javax.script.ScriptEngine 包创建calculator 的这种方式:-)
  • 以前从未使用过 Script Engine,我会检查一下 :)

标签: java swing char jtextfield calculator


【解决方案1】:

也许您的问题是您正在这样做:textin.substring(textin.length()-1)!="+") 虽然您可能需要这样做!textin.substring(textin.length()-1).equals("+")
您应该使用 equals() 方法检查它们是否相同。
检查另一个问题:Java String.equals versus ==
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2011-08-17
    相关资源
    最近更新 更多