更改文本字段以仅显示大写和小写

时间:2019-02-01 23:57:08

标签: java swing jtextfield

我希望文本字段中的第一个字母大写,并且当用户按下“空格”时,第一个字母再次大写。我真的很抱歉提出很多问题,但这是我编程和Java的第一个月。

我的文本字段功能:

private void userNameTextFieldPressed(final java.awt.event.KeyEvent event) {
int key = event.getKeyChar();
if (Character.isAlphabetic(event.getKeyChar())) {
        || (key >= event.VK_A && key <= event.VK_Z)
        || key == event.VK_BACK_SPACE) {
    this.userNameTextField.setEditable(true);
    this.userNameTextField.setBackground(Color.GREEN);
} else {
    this.userNameTextField.setEditable(false);
    this.userNameTextField.setBackground(Color.RED);
 }
}    
}

1 个答案:

答案 0 :(得分:0)

不要

在文本组件上使用invalid entry CRC (expected 0x9aa3fedc but got 0xfeb7201b),由于多种原因,它不是适当的机制

在将文本应用于物理KeyLisyener之前,先使用DocumentFilter进行更改

有关更多详细信息,请参见Implementing a Document Filter

作为一个(非常快速和基本的)示例...

Document

此示例不执行的操作是更改粘贴的文本(除了第一个字符),您需要考虑如何处理并进行适当的更改

而且因为我知道没有人阅读文档或教程...

public class PropercaseDocumentFilter extends DocumentFilter {

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
        text = modify(fb, offset, text, attrs);
        super.replace(fb, offset, length, text, attrs);
    }

    protected String modify(FilterBypass fb, int offset, String text, AttributeSet attrs) throws BadLocationException {
        if (text.length() > 0) {
            Document doc = fb.getDocument();
            StringBuilder sb = new StringBuilder(text);
            if (doc.getLength() == 0) {
                sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
            } else if (offset > 0 && offset < doc.getLength()) {
                if (doc.getText(offset - 1, 1).equals(" ")) {
                    sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
                }
            } else if (doc.getText(doc.getLength() - 1, 1).equals(" ")) {
                sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
            }
            text = sb.toString();
        }
        return text;
    }

}