从jtextfield中删除最后一个字符

时间:2014-12-13 10:55:38

标签: java swing user-interface unicode jtextfield

我希望JTextField拥有最多的字符,我一直在尝试这个代码,我想要做的是,如果用户输入超过13个字符,它应该删除输入的最后一个字符,我也尝试使用Unicode字符(通过将\ b替换为\ u0008)但它给出了相同的结果,这是我的代码:

if(EditTxtFName.getText().length() > 10)
{
    EditTxtFName.setBackground(Color.red);
    EditTxtFName.setText(EditTxtFName.getText() + "\b");
}
else
{
    EditTxtFName.setBackground(Color.white);
}

输出的内容是,而不是删除最后一个字符是添加空格并继续.. 提前谢谢..

2 个答案:

答案 0 :(得分:2)

使用DocumentFilter,它旨在允许您在将内容添加到文本组件的基础Document之前对其进行过滤...

有关详细信息,请参阅Implementing a Document Filter

例如......

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

public class SizeFilter extends DocumentFilter {

    private int maxCharacters;    

    public SizeFilter(int maxChars) {
        maxCharacters = maxChars;
    }

    public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
            throws BadLocationException {

        if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
            super.insertString(fb, offs, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }

    public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
            throws BadLocationException {

        if ((fb.getDocument().getLength() + str.length()
                - length) <= maxCharacters)
            super.replace(fb, offs, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}

可以使用像...这样的东西来应用

((AbstractDocument) EditTxtFName.getDocument()).setDocumentFilter(new SizeFilter(13));

来自DocumentFilter Examples

的示例

答案 1 :(得分:0)

编辑2:

这些解决方案已过时,不应使用。相反,请使用此主题中发布的DocumentFilter解决方案。

原始答案:

你可以添加一个KeyListener,在释放按钮之后将字符串长度限制为13:

textField.addKeyListener(new KeyAdapter() {
    @Override
    public void keyReleased(KeyEvent e) {
        String typed = textField.getText();
        textField.setText(typed.substring(0, Math.min(13, typed.length())));
    }
});

每次在文本字段中键入字符时,这将删除第13个字符后的所有内容。

编辑1:

你可以尝试的另一件事是this。这里,PlainDocument类的扩展方式使得它不接受与文档中已包含的文本相结合的字符串在创建对象时将超过一定的长度集。

这种方法可能更清晰一点,你不会在文本字段中看到“弹出”字符只是稍后删除,而且更容易将此方法应用于多个JTextField。< / p>