文本字段的开头总是出现一个空格字符

Posted

技术标签:

【中文标题】文本字段的开头总是出现一个空格字符【英文标题】:There's always a space character that appears at the start of the text field 【发布时间】:2021-05-31 05:55:37 【问题描述】:

我还是 Java 的新手,我的程序中有这个问题,在文本字段的开头总是有一个空格字符(如“”),我想知道如何删除那个空格文本字段的开头,因为只要有空间,我在文本字段中的输入就不起作用。我可以在输入输入之前将其删除,但这会效率低下。顺便说一句,我在 java 中使用小程序是因为我的教授坚持教小程序。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import javax.swing.JOptionPane; 

public class Final3 extends Applet implements ItemListener, ActionListener


    Choice ch = new Choice();
    CheckboxGroup grp = new CheckboxGroup();

    Label lblType = new Label ("Transaction Type: ");
    Checkbox rbDefault = new Checkbox("Default",grp,true);
    Checkbox rbDeposit = new Checkbox("Deposit",grp,false);
    Checkbox rbWithdraw = new Checkbox("Withdraw",grp,false);

    Label lblPrevious = new Label ("Previous Balance: ");
    TextField txtPrevious = new TextField(20);

    Label lblDenominations = new Label ("Denominations: ");
    Label lblPieces = new Label ("Number of Pieces: ");
    Label lblAmount = new Label ("Amount: ");

    Checkbox cb1000 = new Checkbox ("1000");
    TextField txtPieces1000 = new TextField(5);
    TextField txtAmount1000 = new TextField(5);

    Checkbox cb500 = new Checkbox ("500");
    TextField txtPieces500 = new TextField(5);
    TextField txtAmount500 = new TextField(5);

    Checkbox cb200 = new Checkbox ("200");
    TextField txtPieces200 = new TextField(5);
    TextField txtAmount200 = new TextField(5);

    Checkbox cb100 = new Checkbox ("100");
    TextField txtPieces100 = new TextField(5);
    TextField txtAmount100 = new TextField(5);

    Label lblDeposit = new Label("Total Deposit: ");
    TextField txtDeposit = new TextField(15);

    Label lblCurrent = new Label ("Current Balance: ");
    TextField txtCurrent = new TextField(20);

    Button btnCompute = new Button("Compute");

    Checkbox noLabel = new Checkbox(" ",false,grp);
    int current = 0, previous, deposit, p1k, p5h, p2h, p1h, withdraw;
    String withdrawAmount;

    public void init()
    
        add(lblType);
        add(rbDefault);
        add(rbDeposit);
        add(rbWithdraw);
        add(lblPrevious);
        add(txtPrevious);
        add(lblDenominations);
        add(lblPieces);
        add(lblAmount);
        add(cb1000);
        add(txtPieces1000);
        add(txtAmount1000);
        add(cb500);
        add(txtPieces500);
        add(txtAmount500);
        add(cb200);
        add(txtPieces200);
        add(txtAmount200);
        add(cb100);
        add(txtPieces100);
        add(txtAmount100);
        add(lblDeposit);
        add(txtDeposit);
        add(lblCurrent);
        add(txtCurrent);
        add(btnCompute);

        //set editable
        //set Enabled
        lblPrevious.setEnabled(false);
        txtPrevious.setEnabled(false);
        lblDenominations.setEnabled(false);
        lblPieces.setEnabled(false);
        lblAmount.setEnabled(false);
        cb1000.setEnabled(false);
        txtPieces1000.setEnabled(false);
        txtAmount1000.setEnabled(false);
        cb500.setEnabled(false);
        txtPieces500.setEnabled(false);
        txtAmount500.setEnabled(false);
        cb200.setEnabled(false);
        txtPieces200.setEnabled(false);
        txtAmount200.setEnabled(false);
        cb100.setEnabled(false);
        txtPieces100.setEnabled(false);
        txtAmount100.setEnabled(false);
        lblDeposit.setEnabled(false);
        txtDeposit.setEnabled(false);
        lblCurrent.setEnabled(false);
        txtCurrent.setEnabled(false);
        btnCompute.setEnabled(false);
        rbDefault.setEnabled(false);
        //action/item listener
        rbDefault.addItemListener(this);
        rbDeposit.addItemListener(this);
        rbWithdraw.addItemListener(this);
        cb1000.addItemListener(this);
        cb500.addItemListener(this);
        cb200.addItemListener(this);
        cb100.addItemListener(this);
        btnCompute.addActionListener(this);
    

    public void itemStateChanged(ItemEvent e)
     

        if(rbDefault.getState())
         

        if(rbDeposit.getState())
            lblPrevious.setEnabled(true);
            txtPrevious.setEnabled(true);
            lblDenominations.setEnabled(true);
            lblPieces.setEnabled(true);
            lblAmount.setEnabled(true);
            txtPrevious.setEnabled(true);
            btnCompute.setEnabled(true);
            cb1000.setEnabled(true);
            cb500.setEnabled(true);
            cb200.setEnabled(true);
            cb100.setEnabled(true); 
        

        if(cb500.getState())
            txtPieces500.setEnabled(true);
            txtAmount500.setEnabled(true);
        
        else
            txtPieces500.setEnabled(false);
            txtAmount500.setEnabled(false);
            txtPieces500.setText(" ");
            txtAmount500.setText(" ");
        

        if(cb200.getState())
            txtPieces200.setEnabled(true);
            txtAmount200.setEnabled(true);
        
        else
            txtPieces200.setEnabled(false);
            txtAmount200.setEnabled(false);
            txtPieces200.setText(" ");
            txtAmount200.setText(" ");
         

        if(cb100.getState())
            txtPieces100.setEnabled(true);
            txtAmount100.setEnabled(true);
        
        else
            txtPieces100.setEnabled(false);
            txtAmount100.setEnabled(false);
            txtPieces100.setText(" ");
            txtAmount100.setText(" ");
        

        if(cb1000.getState())
            txtPieces1000.setEnabled(true);
            txtAmount1000.setEnabled(true);
        
        else
            txtPieces1000.setEnabled(false);
            txtAmount1000.setEnabled(false);
            txtPieces1000.setText(" ");
            txtAmount1000.setText(" ");
        

        if(rbWithdraw.getState())
            lblPrevious.setEnabled(true);
            txtPrevious.setEnabled(true);
            btnCompute.setEnabled(true);
            withdrawAmount = JOptionPane.showInputDialog(null, "Enter amount: ", "Withdraw", JOptionPane.QUESTION_MESSAGE);
            withdraw = Integer.parseInt(withdrawAmount);
         
    

    public void actionPerformed(ActionEvent e)
    

        if (e.getSource() == btnCompute)
        
            if(rbDeposit.getState())
                txtAmount1000.setText(String.valueOf(Integer.valueOf(txtPieces1000.getText())*1000));
                txtAmount500.setText(String.valueOf(Integer.valueOf(txtPieces500.getText())*500));
                txtAmount200.setText(String.valueOf(Integer.valueOf(txtPieces200.getText())*200));
                txtAmount100.setText(String.valueOf(Integer.valueOf(txtPieces100.getText())*100));
                txtDeposit.setText(String.valueOf(Integer.valueOf(txtAmount1000.getText())+Integer.valueOf(txtAmount500.getText())+Integer.valueOf(txtAmount200.getText())+Integer.valueOf(txtAmount100.getText())));
                txtCurrent.setText(String.valueOf(Integer.valueOf(txtPrevious.getText())+Integer.valueOf(txtDeposit.getText())));
            
            if(rbWithdraw.getState())
                txtCurrent.setText(String.valueOf(Integer.valueOf(txtPrevious.getText())-Integer.valueOf(txtDeposit.getText())));
            
            
            else if(withdraw < Integer.parseInt(txtPrevious.getText()))
                JOptionPane.showMessageDialog(null,"Insufficient Balance");
            
        

    
    

此代码尚未完成,因为我仍在尝试解决这个烦人的问题,但我找不到问题所在。一些帮助将不胜感激。

【问题讨论】:

很高兴看到部分代码哪里出了问题...但是尝试应用方法.trim()...它应该摆脱空白。 "在文本字段的开头总是有一个空格字符(如 " ")" -- 这是不明确的。你看到显示屏上有一个空间吗?用户输入数据后Java变量值中是否存在空格?不要盲目地使用trim()——如果空间确实存在于数据中,那就是对错误的一种破解。 我们已经进入 21 世纪的 1/5。小程序很久以前就死了。 JOptionPane 是一个 Swing 组件。不要将 AWT 组件与 Swing 混合使用。使用 Swing 组件,然后以“J”、JButton、JTextField 等开头。并使用 JFrame 而不是小程序。阅读Swing tutorial。 在我输入数据之前总是有一个空格导致程序无法运行。我正在努力摆脱它 【参考方案1】:

从代码中,我可以看到你正在设置这样的东西

txtPieces1000.setText(" ");
txtAmount1000.setText(" ");

我认为这是导致问题的原因,请尝试这样设置

txtPieces1000.setText("");
txtAmount1000.setText("");

【讨论】:

【参考方案2】:

尝试使用 trim 函数,因为它会删除字符串前面和结尾的空格。 string.trim() 你可以在使用文本字段的地方使用它。

【讨论】:

以上是关于文本字段的开头总是出现一个空格字符的主要内容,如果未能解决你的问题,请参考以下文章

在 TextField 中的空格后自动触发 shift 按钮 - SwiftUI

C# 正则表达式 - 排除文本开头和结尾的下划线和空格

删除数字,然后从字符串的开头删除一个空格

Python:匹配带有特殊字符和空格的长字符串,然后在开头添加两个字符

如何在 Swift 中防止 UITextField 中出现空白或空格?

如何在 iPhone SDK 的文本字段的文本中检测空格和特殊字符,如 :、?、`、~ 等?