我正在尝试创建一个允许某人设置帐户的GUI。我想在按下创建帐户按钮时验证所有文本字段是否完整。做这个的最好方式是什么?我附加了我的代码,但我对文本字段完整的验证不起作用。
请参阅以下代码:
public class GUIaccounts extends JFrame{
private JLabel name;
private JLabel initDeposit;
private JLabel chooseAccount;
private JLabel empty;
private JTextField nameTextField;
private JTextField initDepositTextField;
private JPanel dataPanel;
private JPanel accountTypePanel;
private JRadioButton savingsAccount;
private JRadioButton premiereChecking;
private ButtonGroup radioButtonGroup;
private JButton createAccountButton;
private JPanel createAccountPanel;
private Bank myBank;
public GUIaccounts(){
setTitle("Create an Account");
setSize(1000,1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buildPanels();
setVisible(true);
pack();
setLocationRelativeTo(null);
myBank=new Bank();
}
private void buildPanels(){
//create the panels
dataPanel= new JPanel();
dataPanel.setLayout(new GridLayout(2,2));
accountTypePanel=new JPanel();
accountTypePanel.setLayout(new GridLayout(3,1));
createAccountPanel=new JPanel();
createAccountPanel.setLayout(new FlowLayout());
//create labels
name=new JLabel("Enter Name:");
Border border = LineBorder.createBlackLineBorder();
name.setBorder(border);
initDeposit=new JLabel("Enter Initial Deposit:");
initDeposit.setBorder(border);
chooseAccount=new JLabel("Choose Account:");
empty=new JLabel(" ");
//create text fields
nameTextField=new JTextField();
initDepositTextField=new JTextField();
//create buttons
savingsAccount = new JRadioButton("Savings Account");
premiereChecking =new JRadioButton ("Premiere Checking Account");
createAccountButton=new JButton("Create Account");
//add labels and field to the panel
dataPanel.add(name);
dataPanel.add(nameTextField);
dataPanel.add(initDeposit);
dataPanel.add(initDepositTextField);
//add button to the panel
accountTypePanel.add(chooseAccount);
accountTypePanel.add(empty);
accountTypePanel.add(savingsAccount);
accountTypePanel.add(premiereChecking);
createAccountPanel.add(createAccountButton);
//add actionListeners to the buttons
savingsAccount.addActionListener(new RadioButtonListener());
premiereChecking.addActionListener(new RadioButtonListener());
createAccountButton.addActionListener(new createAccountListener());
//add focus to the text field
nameTextField.addFocusListener(new nameFieldListener());
initDepositTextField.addFocusListener(new initDepositFieldListener());
//add panels to the contentPane
add(dataPanel, BorderLayout.NORTH);
add(accountTypePanel, BorderLayout.CENTER);
add(createAccountPanel, BorderLayout.SOUTH);
//group radio buttons
radioButtonGroup= new ButtonGroup();
radioButtonGroup.add(savingsAccount);
radioButtonGroup.add(premiereChecking);
}
private class createAccountListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String name=null;
Double amount=null;
if (savingsAccount.isSelected()){
name=nameTextField.getText();
amount=Double.valueOf(initDepositTextField.getText());
if(name!=null && amount !=null){
try{
SavingsAccount account=new SavingsAccount(name,AccountIDs.getNextID(), amount);
myBank.addAccount(account);
JOptionPane.showMessageDialog(null,"Account setup was successful" + myBank.toString());
}
catch(Exception e1){
JOptionPane.showMessageDialog(null,"Unable to set up account. " +e1.getMessage());
}
}
else{
JOptionPane.showMessageDialog(null, "All fields must be completed in order to set up account");
}
}
else if(premiereChecking.isSelected()){
name=nameTextField.getText();
amount=Double.valueOf(initDepositTextField.getText());
if(name!=null && amount!=null){
try{
PremiereCheckingAccount account=new PremiereCheckingAccount(name, AccountIDs.getNextID(),amount);
myBank.addAccount(account);
JOptionPane.showMessageDialog(null,"Account setup was successful" +myBank.toString());
}
catch(Exception e1){
JOptionPane.showMessageDialog(null,"Unable to set up account. " + e1.getMessage());
}
}
else{
JOptionPane.showMessageDialog(null, "All fields must be completed in order to set up account");
}
}
else{
JOptionPane.showMessageDialog(null,"Please select the type of account you want to create.");
}
}
}
private class RadioButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
}
}
private class nameFieldListener implements FocusListener{
public void focusGained(FocusEvent e){
nameTextField.selectAll();//highlight contents
}
public void focusLost(FocusEvent e){
}
}
private class initDepositFieldListener implements FocusListener{
public void focusGained(FocusEvent e){
initDepositTextField.selectAll();
}
public void focusLost(FocusEvent e) {
}
}
public static void main(String[]args){
GUIaccounts myAccount=new GUIaccounts();
}
}
答案 0 :(得分:5)
getText()方法不会返回null。它将返回空字符串(“”)。
您的测试应该是这样的:
if ( textField.getText().trim().length() == 0 )
// error
答案 1 :(得分:1)
老问题,但创建一个"验证"通常是一个好主意。首先执行所有验证的辅助方法,然后如果它检出,您可以将所有值加载到您正在执行的任何操作中(变量,类属性以实例化某些内容等)。
例如:
private class createAccountListener implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
// first we validate all fields... if they pass, we do
// the rest of the code, otherwise we let the failed validation
// code tell user what happened, and skip the rest of the code
if ( validateFields() )
{
String fname = fieldFirstName.getText();
String lname = fieldFirstName.getText();
int age = fieldAge.getText();
}
}
}
// test all text fields for input
public boolean validateFields()
{
if (! validateField( fieldFirstName, "Please enter a first name")
return false;
else
if (! validateField( fieldLastName, "Please enter a last name")
return false;
else
if (! validateInteger( fieldAge, "Please enter an age greater then 0")
return false;
else
return true;
}
// test if field is empty
public boolean validateField( JTextField f, String errormsg )
{
if ( f.getText().equals("") )
return failedMessage( f, errormsg );
else
return true; // validation successful
}
public boolean validateInteger( JTextField f, String errormsg )
{
try
{ // try to convert input to integer
int i = Integer.parseInt(f.getText());
// input must be greater then 0
// if it is, success
if ( i > 0 )
return true; // success, validation succeeded
}
catch(Exception e)
{
// if conversion failed, or input was <= 0,
// fall-through and do final return below
}
return failedMessage( f, errormsg );
}
public boolean failedMessage(JTextField f, String errormsg)
{
JOptionPane.showMessageDialog(null, errormsg); // give user feedback
f.requestFocus(); // set focus on field, so user can change
return false; // return false, as validation has failed
}