删除TextField中的非整数字符

时间:2014-02-01 14:26:36

标签: java swing jtextfield

我是java的新手,我正在尝试创建一个简单的程序,如果它不是整数,将删除用户在文本字段上的输入。

private void jTextField4KeyPressed(java.awt.event.KeyEvent evt) {   
    int j;
    try {
        j = Integer.parseInt(jTextField4.getText());
    }
    catch (NumberFormatException f) {
      jOptionPane1.showMessageDialog(null, "AwtsuPaytsu");
      jTextField4.setText("");
    }
}

它自动成功删除非整数输入。但是,它也会删除整数输入。我该怎么办?我真的需要帮助。我想学习。

5 个答案:

答案 0 :(得分:2)

看看这个例子,这只会接受来自用户的号码。在这里,我使用Document Filter仅接受数字,而不接受其他数字。

import java.awt.*;
import java.awt.event.KeyEvent;
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 JLabel label=new JLabel();
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); 
    contentPane.add(label);


    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{
    private static final long serialVersionUID = 1L;
    @Override
public void insertString(FilterBypass fb, int off
                    , String str, AttributeSet attr) 
                            throws BadLocationException 
{
    // remove non-digits
    fb.insertString(off, str.replaceAll("\\D++", ""), attr);
} 
@Override
public void replace(FilterBypass fb, int off
        , int len, String str, AttributeSet attr) 
                        throws BadLocationException 
{
    // remove non-digits
    fb.replace(off, len, str.replaceAll("\\D++", ""), attr);
}
}

有用的链接

Implementing a Document Filter

答案 1 :(得分:0)

因此,您要删除字符串中的所有非数字,并在文本字段中再次设置该数字。 您可以尝试以下方法。

private void jTextField4KeyPressed(java.awt.event.KeyEvent evt) {   
    String str = jTextField4.getText();
    StringBuilder str1 = new StringBuilder();

    for(int i = 0; i <= str.length() - 1; ++i) {

        if(!Character.isLetter(str.charAt(i))) {
            str1.append(str.charAt(i));
        }
            else {
                jOptionPane1.showMessageDialog(null, "AwtsuPaytsu");
            }

    }
    jTextField4.setText(str1);

}

答案 2 :(得分:0)

即使我认为Jugadus接近这里是正确的。 (没有足够的代表评论抱歉)

提问者似乎有点太多了。

在我看来,在编写之后修复它只是一种糟糕的方法。

我认为你应该看看:

https://stackoverflow.com/a/11093360/661142

通过使用keyListeners,你会遗漏很多东西(比如粘贴等)

或为此目的使用JFormattedTextField,如:

https://stackoverflow.com/a/16228698/661142

答案 3 :(得分:-1)

从jTextField事件中,选择keyReleased事件而不是keyPressed! 并将此代码放在新生成的处理程序中:

private void keyReleased(java.awt.event.KeyEvent evt) {                             
    try {
        Integer.parseInt(jTextField2.getText());
    } catch (NumberFormatException f) {
        if (!jTextField2.getText().isEmpty())
            JOptionPane.showMessageDialog(null, "AwtsuPaytsu");
        jTextField2.setText(jTextField2.getText().replaceAll("[^0-9]", ""));
        //jTextField2.setText("");
    }
}

keyReleased event

答案 4 :(得分:-2)

尝试:

jTextField4.setText(jTextField4.getText().replaceAll("[^0-9]", ""));