【问题标题】:How to prevent a user inputing numeric values如何防止用户输入数值
【发布时间】:2014-02-14 05:28:45
【问题描述】:

我正在为俱乐部创建一个 GUI,并尝试设置一个测试,以便在提示新用户输入他们的姓名时,他们将无法输入任何数值。

这是我目前的代码:

else if((this.jTextFieldName.getText() ){
        errorMessage = "Name is not acceptable";
        this.jTextFieldNameActionPerformed(requestFocusInWindow());
}

第一行中 getText() 之后的空格是我需要输入测试的地方,但我找不到可行的方法。 有人可以帮忙吗?

【问题讨论】:

标签: java swing validation actionlistener jtextfield


【解决方案1】:

为什么不试试正则表达式?

else if(this.jTextFieldName.getText().matches(".*\\d+.*") ){

【讨论】:

    【解决方案2】:

    如果可以的话,那就去吧

    jTextField.addKeyListener(new KeyAdapter() {
        public void keyTyped(KeyEvent e) {
          char c = e.getKeyChar();
          if (!((c >= 'a') && (c <= 'z') || (c >= 'A') && (c <= 'Z') ||
             (c == KeyEvent.VK_BACK_SPACE) ||
             (c == KeyEvent.VK_DELETE))) {
            getToolkit().beep();
            //JOptionPane.showMessageDialog(rootPane, "Enter only Alphabets");
            e.consume();
          }
        }
      });
    

    【讨论】:

    • 实际上使用keyListener不是正确的方法。
    • 不要将KeyListener 用于文本字段。正确的方法是使用DocumentFilter 甚至JFormattedTextField
    • @peeskillet 谢谢你,下次我会关注你的。
    【解决方案3】:

    试试正则表达式^[0-9]+$

    你可以这样实现:

    this.jTextFieldName.getText().matches("^[0-9]+$")
    

    【讨论】:

    • 根据问题,“他们将无法输入任何数值”
    • 问题是这只匹配完全数字的答案。所以“Abc123”不匹配这个模式。还需要在开头使用 'not ("!")。
    【解决方案4】:

    swing 中最好的方法是使用PlainDocument 作为 textComponent 的文档。这是使用DocumentFilter。在Text Component Features implementing a DocumentFilter 中查看如何操作。您必须覆盖 ìnsertString 方法,然后您才能使用您的正则表达式。在这里,您有一个使用 DocumentFilter 的example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多