Java 使用if语句测试JTextField是否为整数

Java 使用if语句测试JTextField是否为整数,java,swing,if-statement,actionlistener,jtextfield,Java,Swing,If Statement,Actionlistener,Jtextfield,我希望我的程序能够判断我的两个JTextFields中的内容是整数还是字符串 代码 public void actionPerformed(ActionEvent e){ if(inputH.getText().equals(" Set Height ") || inputW.getText().equals(" Set Width ")){ JOptionPane.show

我希望我的程序能够判断我的两个JTextFields中的内容是整数还是字符串

代码

          public void actionPerformed(ActionEvent e){
                if(inputH.getText().equals(" Set Height ") || 
                        inputW.getText().equals(" Set Width ")){
          JOptionPane.showMessageDialog(frame,
          "Change Height And Width To A Number.",
          "Change Height To A Number",
          JOptionPane.ERROR_MESSAGE);
                    }                  

                }
            });    
这个if语句测试JTextField中的内容是否是
“Set Height”
“Set Width”
,但我希望它们测试其中的内容是否是数字,我该如何做


我无法计算出整数.ParseInt。请提供帮助。

不确定测试在代码中的确切位置执行,但可以使用此方法确定字符串是否为整数:

public static boolean isInteger(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    }
    // if exception isn't thrown, then it is an integer
    return true;
}
假设您的代码不需要抛出异常,则采用基于无异常的方式降低成本:

public static boolean isInt(String s){
        for(int i = 0; i < s.length(); i++){
            if(!Character.isDigit(s.charAt(i))){
                 return false;
            }
        }
        return true;
}
公共静态布尔isInt(字符串s){
对于(int i=0;i
不确定测试在代码中的确切位置执行,但可以使用此方法确定字符串是否为整数:

public static boolean isInteger(String s) {
    try { 
        Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
        return false; 
    }
    // if exception isn't thrown, then it is an integer
    return true;
}
假设您的代码不需要抛出异常,则采用基于无异常的方式降低成本:

public static boolean isInt(String s){
        for(int i = 0; i < s.length(); i++){
            if(!Character.isDigit(s.charAt(i))){
                 return false;
            }
        }
        return true;
}
公共静态布尔isInt(字符串s){
对于(int i=0;i
您也可以在
操作
方法中处理关键事件。试试这个

首先创建一个
JTextField

JTextField j=new JTextField();
然后将
KeyListner
添加到此jtext字段,如下所示

    j.addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub
            if(arg0.getKeyCode()>57 || arg0.getKeyCode()<48) {
                    //your error message and other handling code here
                JOptionPane.showMessageDialog(PatentFrame, "Only integer allowed", "Message title",JOptionPane.ERROR_MESSAGE);
            }

        }

        @Override
        public void keyPressed(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }
    });
j.addKeyListener(新的KeyListener(){
@凌驾
public void keyTyped(KeyEvent arg0){
//TODO自动生成的方法存根
}
@凌驾
公共无效密钥已释放(KeyEvent arg0){
//TODO自动生成的方法存根

如果(arg0.getKeyCode()>57 | | arg0.getKeyCode()您也可以在
操作
方法中处理键事件。请尝试以下操作

首先创建一个
JTextField

JTextField j=new JTextField();
然后将
KeyListner
添加到此jtext字段,如下所示

    j.addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub
            if(arg0.getKeyCode()>57 || arg0.getKeyCode()<48) {
                    //your error message and other handling code here
                JOptionPane.showMessageDialog(PatentFrame, "Only integer allowed", "Message title",JOptionPane.ERROR_MESSAGE);
            }

        }

        @Override
        public void keyPressed(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }
    });
j.addKeyListener(新的KeyListener(){
@凌驾
public void keyTyped(KeyEvent arg0){
//TODO自动生成的方法存根
}
@凌驾
公共无效密钥已释放(KeyEvent arg0){
//TODO自动生成的方法存根

如果(arg0.getKeyCode()>57 | | arg0.getKeyCode()用于限制用户输入除数字以外的任何内容
,则可以在
JTextField
上设置

下面是一个小例子:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.DocumentFilter.FilterBypass;

public class InputInteger
{
    private JTextField tField;
    private MyDocumentFilter documentFilter;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Input Integer Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5));
        tField = new JTextField(10);
        ((AbstractDocument)tField.getDocument()).setDocumentFilter(
                new MyDocumentFilter());        
        contentPane.add(tField); 

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        Runnable runnable = new Runnable()
        {
            @Override
            public void run()
            {
                new InputInteger().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

class MyDocumentFilter extends DocumentFilter
{   
    @Override
    public void insertString(DocumentFilter.FilterBypass fp
            , int offset, String string, AttributeSet aset)
                                throws BadLocationException
    {
        int len = string.length();
        boolean isValidInteger = true;

        for (int i = 0; i < len; i++)
        {
            if (!Character.isDigit(string.charAt(i)))
            {
                isValidInteger = false;
                break;
            }
        }
        if (isValidInteger)
            super.insertString(fp, offset, string, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    @Override
    public void replace(DocumentFilter.FilterBypass fp, int offset
                    , int length, String string, AttributeSet aset)
                                        throws BadLocationException
    {
        int len = string.length();
        boolean isValidInteger = true;

        for (int i = 0; i < len; i++)
        {
            if (!Character.isDigit(string.charAt(i)))
            {
                isValidInteger = false;
                break;
            }
        }
        if (isValidInteger)
            super.replace(fp, offset, length, string, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}

要限制用户输入除数字以外的任何内容,可以在
JTextField
上设置

下面是一个小例子:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.DocumentFilter.FilterBypass;

public class InputInteger
{
    private JTextField tField;
    private MyDocumentFilter documentFilter;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Input Integer Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5));
        tField = new JTextField(10);
        ((AbstractDocument)tField.getDocument()).setDocumentFilter(
                new MyDocumentFilter());        
        contentPane.add(tField); 

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        Runnable runnable = new Runnable()
        {
            @Override
            public void run()
            {
                new InputInteger().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

class MyDocumentFilter extends DocumentFilter
{   
    @Override
    public void insertString(DocumentFilter.FilterBypass fp
            , int offset, String string, AttributeSet aset)
                                throws BadLocationException
    {
        int len = string.length();
        boolean isValidInteger = true;

        for (int i = 0; i < len; i++)
        {
            if (!Character.isDigit(string.charAt(i)))
            {
                isValidInteger = false;
                break;
            }
        }
        if (isValidInteger)
            super.insertString(fp, offset, string, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    @Override
    public void replace(DocumentFilter.FilterBypass fp, int offset
                    , int length, String string, AttributeSet aset)
                                        throws BadLocationException
    {
        int len = string.length();
        boolean isValidInteger = true;

        for (int i = 0; i < len; i++)
        {
            if (!Character.isDigit(string.charAt(i)))
            {
                isValidInteger = false;
                break;
            }
        }
        if (isValidInteger)
            super.replace(fp, offset, length, string, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}

只需使用一个“输入应如何被接受为整数?”它是否可以大于2147483647(最大整数)?它是否可以为负数?文本字段中是否可以有空格、点或任何其他字符?@Pshemo否,只是java整数的数字所以(只是为了确保)只有范围
[-2147483648;2147483647]内的数字
?您还应该查看和,这将使您能够确保输入字段的内容始终符合您的期望…只需使用一个如何将输入外观接受为整数?它是否可以大于2147483647(最大整数)?它可以是负数吗?文本字段中可以有空格、点或任何其他字符吗?@Pshemo不,只有java整数的数字所以(只是为了确保)只有范围
[-2147483648;2147483647]中的数字
?您还应该查看和,这将使您能够确保输入字段的内容始终是您所期望的……异常不应用于“正常”非异常测试。通常认为它的形式很差,效率很低(生成堆栈跟踪的成本很高)。我想他可能想抛出一个异常。我添加了一个基于非异常的方法。异常不应用于“正常”非异常测试。通常认为它的形式很差,而且效率非常低(生成堆栈跟踪的成本很高)。我想他可能想抛出一个异常。我添加了一个基于非异常的方法。关于你的方法不好的原因,有三件事:1)即使你按下一个
非数字
值,仍然
JTextField
会接受它,尽管毫无疑问它会向你显示消息。2。)如果条件应包括| |和非&&以使其工作,因为没有
KeyCode
值,该值小于0,同时大于9.3。)即使您按了
Shift
键或
Escape
键,它仍然会显示相同的消息,这意味着它也不符合正常功能。-1建议键盘侦听器进行验证(不完整:f.i.未粘贴文本)关于您的方法不好的原因,有三件事:1。)即使你按下一个非数字的
值,仍然
JTextField
会接受它,尽管毫无疑问它会向你显示消息。2)如果条件应该包括| |而不是&&它才能工作,因为没有
KeyCode
值,它小于0,同时大于9。3)即使你按下
Shift
键或
Escape
仍然会显示相同的消息,这意味着它也在违反正常功能。-1用于建议键侦听器进行验证(不完整:f.i.未粘贴文本)