java:验证GUI中的所有文本字段都已完成

时间:2011-06-19 03:56:56

标签: java swing user-interface textfield

我正在尝试创建一个允许某人设置帐户的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();
    }   

}

2 个答案:

答案 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
}