我希望文本字段中的第一个字母大写,并且当用户按下“空格”时,第一个字母再次大写。我真的很抱歉提出很多问题,但这是我编程和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);
}
}
}
答案 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;
}
}