gpt4 book ai didi

java - showMessageDialog() 在 FocusListener 中被调用两次

转载 作者:行者123 更新时间:2023-12-03 19:45:15 24 4
gpt4 key购买 nike

我在 JFrame 中有 2 个文本字段,当焦点从 textfield1 丢失时,我想验证 textfield1 中的数据。因此,我在 FocusLost() 方法中使用了 FocusListener 并使用了 showMessageDialog(),然后将焦点设置回 textfield1。当我点击 JFrame 窗口内除 textfield1 以外的任何组件时它工作正常,但是当我点击 JFrame 窗口外的任何地方时,showMessageDialog() 被调用两次 并且焦点转到 textfield2,而焦点应保留在 textfield1 上。

    @Override
public void focusGained(FocusEvent e) {}

@Override
public void focusLost(FocusEvent e) {
boolean show = false;
String theRegex = "[0-9]";
Pattern checkRegex = Pattern.compile(theRegex);
Matcher regexMatcher = checkRegex.matcher( MemberID );
while ( !regexMatcher.find() && show==false){
JOptionPane.showMessageDialog(null,"Please enter numbers","Validation Error",JOptionPane.ERROR_MESSAGE);
MemberID_Text.requestFocusInWindow();
MemberID_Text.selectAll();
show = true;

}

}

最佳答案

你可以这样做来验证是否输入了数字,并避免使用正则表达式

     class IntVerifier extends InputVerifier {

@Override public boolean verify(JComponent input) {
String text =((JTextField) input).getText();
int n = 0;

try {
n = Integer.parseInt(text); }

catch (NumberFormatException e) {
return false;
}

return true;
}
}

然后在文本字段上使用输入 validator

 IntVerifier intv = new IntVerifier();      
myTextField = new JTextField();
myTextField.setInputVerifier(intv);

关于java - showMessageDialog() 在 FocusListener 中被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13355398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com