我有一个计算应用程序,我需要验证字段以检查输入的值是否为数字而不是字母数字。我对这些代码有一些想法 如果我做错了什么或看起来像菜鸟,请指导我,因为这是我第一次尝试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”命令?
答案 0 :(得分:7)
Float.parseFloat()
不是数字且无法解析为NumberFormatException
,则 String
会抛出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);
}
}
答案 1 :(得分:2)
如果字母数字输入首先对Swing组件无效,那么您应该首先将组件限制为仅接受某种格式,而不是验证此后输入。
使用Swing提供的格式化程序,您可以设置格式化文本字段,以本地化格式键入日期和数字。另一种格式化程序使您可以使用字符掩码来指定可在字段中的每个位置键入的字符集。例如,您可以指定用于以特定格式键入电话号码的掩码,例如
(XX) X-XX-XX-XX-XX
。
也就是说,您可以使用Integer.parseInt(String s)
来查看是否可以将任意字符串解析为int
;如果不能,该方法抛出NumberFormatException
。还有Double.parseDouble
等等。
答案 2 :(得分:1)
try {
Integer.parseInt(foo);
} catch (NumberFormatException e) {
// Naughty
}
答案 3 :(得分:0)
试试这个:
String temp = txtField.getText();
try
{
int val = Integer.parseInt(temp);
}
catch(NumberFormatException e) {
System.out.println("Invalid");
}
为了让它更有趣,请使用JOptionPane(使其更具互动性)
答案 4 :(得分: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();
}
}
});
答案 5 :(得分:-1)
一个相对古老的问题,但我想我会抓住它,可能会帮助随机的谷歌搜索。
有人可以采取的最小化代码和减少其他类数量的另一种方法是为keyType事件添加KeyListener
并检查 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();
}
}
});
您还可以添加另一个事件侦听器来验证整个整数以进行进一步处理(例如,整个数字必须>&gt;和<5220)。 一个好的地方就是focusLost事件(?)。
如果您经常使用这些功能,最好将JTextField类子类化以提供此功能。
编辑:使用Character.isLetter(keyEvent.getKeyChar())
更加清晰。