![](/img/trans.png)
[英]How to validate a textfield in pageablelistview in java wicket
[英]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.