首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >showMessageDialog()在FocusListener中被调用两次

showMessageDialog()在FocusListener中被调用两次
EN

Stack Overflow用户
提问于 2012-11-13 04:00:03
回答 1查看 720关注 0票数 3

JFrame中有两个textfield1,当焦点从textfield1中丢失时,我希望验证textfield1中的数据。因此,我在FocusListener方法中使用了showMessageDialog()showMessageDialog(),然后将焦点返回到textfield1。当我单击JFrame窗口中的除textfield1之外的任何组件时,它工作得很好,但是当我单击JFrame窗口之外的任何位置时,showMessageDialog()会被调用两次,而焦点则会转到textfield2,而焦点应该保持在textfield1上。

代码语言:javascript
复制
    @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;

        }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-13 13:54:09

您可以这样做,以验证是否输入了一个数字,并避免所有的正则表达式在一起。

代码语言:javascript
复制
     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;
      }
      }

然后在文本字段上使用输入验证器。

代码语言:javascript
复制
 IntVerifier intv = new IntVerifier();      
 myTextField = new JTextField();
 myTextField.setInputVerifier(intv);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13355398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档