簡體   English   中英

如何在Java中驗證文本字段

[英]How to Validate a textfield in java

您好,我需要一些幫助驗證gui中的文本字段。 我的教授給了我有關如何做的提示,但是它凍結了我的程序。 我嘗試了其他方法,但是如果輸入文本,則不會顯示下一個窗口。

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.*;

//import statements here
public class UserWindow extends JFrame
{

    private JTextField nameField, ageField, creditCardField;
    private JButton backButton, nextButton;

    public UserWindow()
    {
        super("Please enter your information");

        setSize(700,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(new GridLayout(4,2));

        buildPanel();
        setVisible(true);

    }

    private void buildPanel(){

        nameField = new JTextField(10);
        ageField =  new JTextField(2);
        creditCardField = new JTextField(10);

        backButton = new JButton("Back");
        nextButton = new JButton("Next");
        nextButton.addActionListener(new NextButton());
        backButton.addActionListener(new BackButton());

        JLabel NameLabel =  new JLabel("Please enter your name");

        JLabel ageLabel = new JLabel("Enter your age");

        JLabel creditCardLabel = new JLabel("Enter your credit card number");

        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JPanel panel3 = new JPanel();
        JPanel panel4 = new JPanel();
        JPanel panel5 = new JPanel();
        JPanel panel6 = new JPanel();
        JPanel panel7 = new JPanel();
        JPanel panel8 = new JPanel();

        add(panel1);
        add(panel2);
        add(panel3);
        add(panel4);
        add(panel5);
        add(panel6);
        add(panel7);
        add(panel8);

        panel1.add(NameLabel);
        panel2.add(nameField);
        panel4.add(ageField);
        panel6.add(creditCardField);
        panel3.add(ageLabel);
        panel5.add(creditCardLabel);    
        panel7.add(backButton);
        panel8.add(nextButton);

    }//end of panel building

    //action listeners for fields/buttons

    private class NextButton implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String str;
            int age;
            str = nameField.getText();

            if (str.equals("")){
                JOptionPane.showMessageDialog(null,"Please enter your name.");

                while(true){
                    nameField.requestFocusInWindow();
                    if(!str.equals(""))
                        break;
                }
            }

            if(e.getSource() == nextButton)
                new MovieSelection();
            setVisible(false);

        }
    }
    private class BackButton implements ActionListener{
        public void actionPerformed(ActionEvent e){

            if (e.getSource() == backButton)
                setVisible(false);
            new SelectUserWindow();
        }
    }



}

如果最初是空字符串,則永遠不要為str分配新值。

我想你需要像

str = nameField.getText();

while(true)循環中。

這很凍結,因為您有以下內容:

if (str.equals("")){
     JOptionPane.showMessageDialog(null,"Please enter your name.");
     while(true){ //<- Runs forever
          nameField.requestFocusInWindow();
          if(!str.equals(""))
               break;
     }
}

當AcId說您在進入循環(或if )后再也不給str賦值時,AcId是正確的。 這意味着您永遠不會更改str的值,並且永遠不會等於""並且它將永遠在循環中運行。 循環在與用戶界面相同的線程中運行,因此用戶界面將沒有時間做其他任何事情(因此凍結)。

在這種情況下讓循環永遠運行是沒有意義的。 看來您正在嘗試讓GUI忙於等待用戶輸入名稱。 不要那樣做 而是檢查用戶是否輸入了某些內容,如果沒有輸入,請警告用戶並等待用戶再次單擊該按鈕。

因此,請刪除循環並使用簡單的if-else語句。

if (str.equals("")){  //User have not entered anything. 
    JOptionPane.showMessageDialog(null,"Please enter your name.");
    nameField.requestFocusInWindow();
    //Do NOT loop here.
}
else { 
    //Do everything you need to do when the user have entered something
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM