2

我有一个计算应用程序,我需要验证字段以检查输入的值是否是数字而不是字母数字。我对代码有一些想法。
如果我做错了什么或看起来很菜鸟,请指导我,因为这是我第一次尝试 Swing。

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
    String text1 = jTextField1.getText();            // TODO add your handling code here:
}

private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
    String text2 = jTextField2.getText();        // TODO add your handling code here:
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    if (text1 and text2 != <numeric number>){
        JOptionPane.showConfirmDialog(null, "Please enter numbers only", "naughty", JOptionPane.CANCEL_OPTION);
    }
    // First we define float variables.
    float num1, num2, result;
    // We have to parse the text to a type float.
    num1 = Float.parseFloat(jTextField1.getText());
    num2 = Float.parseFloat(jTextField2.getText());
    // Now we can perform the addition.
    result = num1+num2;
    // We will now pass the value of result to jTextField3.
    // At the same time, we are going to
    // change the value of result from a float to a string.
    jTextField3.setText(String.valueOf(result));
    // TODO add your handling code here:
}

请帮忙。顺便问一下,为什么我的 NetBeans 一直告诉我它无法识别“JOptionPane”命令?

4

6 回答 6

7

Float.parseFloat()NumberFormatException如果aString不是数字并且不能解析成 a ,则会抛出a Float。您可以添加一个try-catch块来检查这种情况:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    float num1, num2, result;

    try {
        num1 = Float.parseFloat(jTextField1.getText());
        num2 = Float.parseFloat(jTextField2.getText());
        result = num1+num2;
        jTextField3.setText(String.valueOf(result));

    } catch (NumberFormatException e) {
        JOptionPane.showConfirmDialog(null, "Please enter numbers only", "naughty", JOptionPane.CANCEL_OPTION);
    }
}
于 2010-08-05T06:11:46.673 回答
2

如果字母数字输入首先对 Swing 组件无效,那么您应该首先限制组件只接受某种格式,而不是验证这个 post-entry。

使用 Swing 提供的格式化程序,您可以设置格式化文本字段以本地化格式键入日期和数字。另一种格式化程序使您能够使用字符掩码来指定可以在字段中的每个位置键入的字符集。例如,您可以指定用于以特定格式键入电话号码的掩码,例如(XX) X-XX-XX-XX-XX.

也就是说,除其他外,您可以使用Integer.parseInt(String s)来查看是否可以将任意字符串解析为int; NumberFormatException如果不能,该方法将抛出。还有Double.parseDouble,等等。

也可以看看

相关问题

于 2010-08-05T06:21:36.080 回答
1
try {
    Integer.parseInt(foo);
} catch (NumberFormatException e) {
    // Naughty
}
于 2010-08-05T06:06:12.070 回答
0

尝试这个:

String temp = txtField.getText();
try 
  {
    int val = Integer.parseInt(temp);
  }
catch(NumberFormatException e) {
  System.out.println("Invalid");
 }

为了让它更有趣,使用 JOptionPane(让它更具交互性)

于 2014-02-18T18:43:23.307 回答
0
textFieldCrDays = new JTextField();
    textFieldCrDays.addKeyListener(new KeyAdapter() {
        //// validate onlu numeric value
        public void keyTyped(KeyEvent e) {
            if (textFieldCrDays.getText().length() < 3 && e.getKeyChar() >='0' && e.getKeyChar() <= '9')
            {
                // Optional
                super.keyTyped(e);
            }
            else
            {
                // Discard the event
                e.consume();
            }
        }
    });
于 2015-06-11T16:34:04.027 回答
-1

一个相对古老的问题,但我想我会试一试,也许可以帮助随机的谷歌搜索。

有人可以采取的另一种方法来最小化代码并减少附加类的数量是KeyListener为 keyType 事件添加一个并检查Char值。这不是很便携(您不能使用特定于区域的格式,例如数字标点符号),但这对于直整数可能非常有用。你也可以在这里做一个相对长度:

textField.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyTyped(KeyEvent keyEvent)
    {
        if (textField.getText().length() < 3 && keyEvent.getKeyChar() >= '0' && keyEvent.getKeyChar() <= '9')
        {
            // Optional
            super.keyTyped(keyEvent);
        }
        else
        {
            // Discard the event
            keyEvent.consume();
        }
    }
});

您还可以添加另一个事件侦听器来验证整个整数以供进一步处理(例如,整数必须 > 800 且 < 5220)。一个很好的地方是在 focusLost 事件(?)上。

如果您经常使用这些功能,最好将 JTextField 类子类化以提供此功能。

编辑:使用Character.isLetter(keyEvent.getKeyChar())更加清晰。

于 2011-10-24T18:11:28.917 回答