2011-06-19 36 views
2

我正在尝试创建一个允许某人设置帐户的GUI。我想验证在按下创建帐户按钮时所有文本字段都已完成。做这个的最好方式是什么?我附上我的代码,但我的验证文本字段已完成无法正常工作。java:验证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

TL;博士(和一些字符,以满足要最小长度) –

回答

3

了gettext()方法将不会返回空。它将返回空字符串(“”)。

您的测试应该是这样的:

if (textField.getText().trim().length() == 0) 
    // error 
0

老问题,但它通常是创建第一个完成了所有的验证了“确认”辅助方法,是一个好主意,那么如果它检查出来,你可以加载所有的值都变成你正在做的事情(变量,实例化类的属性等)。

例如:

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 
}