gpt4 book ai didi

java - 如何确保 JTextField 只包含字母?

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:07 25 4
gpt4 key购买 nike

我只想在我的姓名字段中输入字母。

我已经尝试过使用 matches 方法,但不幸的是出了点问题,抛出了异常。

还有其他检查方法吗?

   import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class CreateAccount extends JFrame implements ActionListener{

JPanel details = new JPanel(new GridBagLayout());

JLabel fName= new JLabel("First Name:");
JTextField firstNameField = new JTextField(10);

JLabel lName= new JLabel("Last Name:");
JTextField lastNameField = new JTextField(10);

JLabel initialDeposit = new JLabel("Initial Deposit: ");
JTextField initialDepositField = new JTextField(10);

String accountTypes[] = {"Savings","Current"};

JComboBox accountTypesComboBox = new JComboBox(accountTypes);
JLabel accountType= new JLabel("Account type: ");

JButton submit = new JButton("SUBMIT");
JButton review = new JButton("REVIEW");

Administrator admin = new Administrator();
User u[] = new User[admin.maxNumberOfUsers];

CreateAccount() {
buildGui();
setSize(400,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void initialiseUserCount() {
admin.numberOfSavingsAccount = 0;
admin.numberOfCurrentAccount = 0;
admin.numberOfUsers=0;
}
public void buildGui() {

setTitle("New Account Form");

//JPanel submitPanel = new JPanel();
//submitPanel.add(submit);


GridBagConstraints c = new GridBagConstraints();
c.insets=new Insets(10,10,10,10);
// Stretch components horizontally (but not vertically)
c.fill = GridBagConstraints.HORIZONTAL;
// Components that are too short or narrow for their space
// Should be pinned to the northwest (upper left) corner
c.anchor = GridBagConstraints.NORTHWEST;
// Give the "last" component as much space as possible
c.weightx = 1.0;

c.gridx=0;
c.gridy=0;
details.add(fName,c);
c.gridx=1;
c.gridy=0;
details.add(firstNameField,c);
c.gridx=0;
c.gridy=1;
details.add(lName,c);
c.gridx=1;
c.gridy=1;
details.add(lastNameField,c);
c.gridx=0;
c.gridy=2;
details.add(initialDeposit,c);
c.gridx=1;
c.gridy=2;
details.add(initialDepositField,c);
c.gridx=0;
c.gridy=3;
details.add(accountType,c);
c.gridx=1;
c.gridy=3;
details.add(accountTypesComboBox,c);
c.gridx=0;
c.gridy=4;
details.add(submit,c);
c.gridx=1;
c.gridy=4;
details.add(review,c);
add(details);

firstNameField.addActionListener(this);
review.addActionListener(this);

}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==firstNameField) {
try {
String uFName = firstNameField.getText().toString();

if(!uFName.matches("[A-Za-z]+"))
throw new Exception();
}
catch(Exception e1) {
firstNameField.setText("");
JOptionPane.showMessageDialog(firstNameField,"Please enter a valid name!");
}
}
}
}

最佳答案

使用 DocumentFilter。它将允许您对文本字段执行实时验证

参见 Implementing a Document FilterDocumentFilter Examples了解更多详情

例如……

public class CharFilter extends DocumentFilter {

public void insertString(DocumentFilter.FilterBypass fb, int offset,
String string, AttributeSet attr)
throws BadLocationException {

StringBuffer buffer = new StringBuffer(string);
for (int i = buffer.length() - 1; i >= 0; i--) {
char ch = buffer.charAt(i);
if (!Character.isLetter(ch)) {
buffer.deleteCharAt(i);
}
}
super.insertString(fb, offset, buffer.toString(), attr);
}

public void replace(DocumentFilter.FilterBypass fb,
int offset, int length, String string, AttributeSet attr) throws BadLocationException {
if (length > 0) {
fb.remove(offset, length);
}
insertString(fb, offset, string, attr);
}
}

并应用类似...

JTextField firstNameField = new JTextField(20);
((AbstractDocument)firstNameField.getDocument()).setDocumentFilter(new CharFilter());

关于java - 如何确保 JTextField 只包含字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29911095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com