Java 使用if语句测试JTextField是否为整数
我希望我的程序能够判断我的两个JTextFields中的内容是整数还是字符串 代码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
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.未粘贴文本)