Метод getName не может проверить JTextField из другого класса
Я хотел проверить мой другой JTextField
с помощью InputVerifier
метод. Что я сделал, я назначил имя для другого JTextField
с помощью setName
,
private void validateJTextField()
{
tfAddress.setName("tfAddress");
tfLastName.setInputVerifier(new Validation());
tfFirstName.setInputVerifier(new Validation());
tfMiddleName.setInputVerifier(new Validation());
tfNickname.setInputVerifier(new Validation());
tfAddress.setInputVerifier(new Validation());
}
Классвалидации
public class Validation extends InputVerifier
{
@Override
public boolean verify(JComponent input)
{
String text = null;
String name = input.getName();
if(input instanceof JTextField)
{
text = ((JTextField) input).getText();
if(text.trim().length() == 0 || text.equals(""))
{
JOptionPane.showMessageDialog(null, "Cannot left blank");
return false;//Return false if the component need to keep focus
}
else
{
try
{
Double.parseDouble(text);
JOptionPane.showMessageDialog(null, "Cannot insert numeric");
return false;
}
catch(NumberFormatException e)
{
}
}
if(text.equals("") && name.equals("tfAddress"))
{
System.out.print("This is tfAddress");
return false;
}
}
return true;//Return true if the component should give up focus
}
}
Как вы можете видеть здесь, я пытаюсь подтвердить или проверить, name
Строка равна "tfAddress"
но, к сожалению, это не будет соответствовать условию. Любая помощь или советы, как я могу решить эту проблему?
2 ответа
Вот в вашем коде это утверждение if(text.equals("") && name.equals("tfAddress"))
никогда не будет удовлетворен, из-за if(text.trim().length() == 0 || text.equals(""))
проверить, так text.equals("")
никогда не вернет истину так name.equals("tfAddress")
пропущу
В первой проверке if
предложение, если текст пустой, то код вернется. Так вот if(text.equals("") && name.equals("tfAddress"))
Вы можете проверить if(name.equals("tfAddress"))
Я только что решил проблему. Я ошибся в логике. Я на основе text.trim().length() == 0 || text.equals("")
поэтому, когда я запускаю программу, она сначала проверяет, является ли текст пустым. Что я сделал, я установил условие на основе setName
метод. Надеюсь, что это поможет другим.
private void validateJTextField()
{
tfLastName.setName("tfLastName");
tfFirstName.setName("tfFirstName");
tfMiddleName.setName("tfMiddleName");
tfNickname.setName("tfNickname");
tfAddress.setName("tfAddress");
tfContact.setName("tfContact");
tfLastName.setInputVerifier(new Validation());
tfFirstName.setInputVerifier(new Validation());
tfMiddleName.setInputVerifier(new Validation());
tfNickname.setInputVerifier(new Validation());
tfAddress.setInputVerifier(new Validation());
tfContact.setInputVerifier(new Validation());
}
public class Validation extends InputVerifier
{
@Override
public boolean verify(JComponent input)
{
String text = null;
String cb = null;
String name = input.getName();
if(input instanceof JTextField)
{
text = ((JTextField) input).getText();
if(name.equals("tfLastName") || name.equals("tfFirstName") || name.equals("tfMiddleName") || name.equals("tfNickname"))
{
if(text.trim().length() == 0 || text.equals(""))
{
JOptionPane.showMessageDialog(null, "Cannot left blank");
return false;//Return false if the component need to keep focus
}
else
{
try
{
Double.parseDouble(text);
JOptionPane.showMessageDialog(null, "Cannot insert numeric");
return false;
}
catch(NumberFormatException e)
{
}
}
}
else if(name.equals("tfAddress"))
{
if(text.trim().length() == 0 || text.equals(""))
{
JOptionPane.showMessageDialog(null, "Cannot left blank");
return false;//Return false if the component need to keep focus
}
}
}