如何在 jTextField 中只输入字符? [英] how can i type only characters in jTextField?

查看:35
本文介绍了如何在 jTextField 中只输入字符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只需要在 java 中的文本字段区域中键入字符.我通过更改为各种类型尝试了以下代码.

I need to type only characters in the text field area in java. I tried below codes by changing to various types.

char a= evt.getKeyChar();
    if(!(a>='0'&&a<='9')){
    evt.consume();
    }

推荐答案

尝试使用 DocumentFilter,并将其附加到 JTextFieldDocument.

Try to use DocumentFilter, and attach that to the Document of the JTextField.

这是一个相同的小例子,寻求帮助:

Here is a small example for the same, for help:

package to.uk.gagandeepbali.examples;

import javax.swing.*;
import javax.swing.text.AbstractDocument;
import java.awt.*;

/**
 * Created by Gagandeep Bali on 7/12/2014.
 */
public class FilterCharacters {

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

        JPanel contentPane = new JPanel();
        JTextField 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 FilterCharacters().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

MyDocumentFilter.java

package to.uk.gagandeepbali.examples;

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

/**
 * Created by Gagandeep Bali on 7/12/2014.
 */
public class MyDocumentFilter extends DocumentFilter {
    @Override
    public void insertString(DocumentFilter.FilterBypass fp, int offset,
                                String stringToFilter, AttributeSet aset)
                                    throws BadLocationException {
        int len = stringToFilter.length();
        if (Character.isLetter(stringToFilter.charAt(len - 1)))
            super.insertString(fp, offset, stringToFilter, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    @Override
    public void replace(DocumentFilter.FilterBypass fp, int offset, int length,
                                        String stringToFilter, AttributeSet aset)
                                                    throws BadLocationException {
        int len = stringToFilter.length();
        if (Character.isLetter(stringToFilter.charAt(len - 1)))
            super.replace(fp, offset, length, stringToFilter, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}

这篇关于如何在 jTextField 中只输入字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆