文本字段的开头总是出现一个空格字符
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
Python:匹配带有特殊字符和空格的长字符串,然后在开头添加两个字符