0
我的問題是:FormattedTextField混合大小寫字符的DocumentFilter設置爲大寫
我有一個:
public class WWFormattedTextField extends JFormattedTextField implements FocusListener {
所有在所有屏幕的格式文本框將始終是大寫。我們希望他們出現大寫同時打字等,所以這裏我們所做的事情爲:
public class WWFormattedTextField extends JFormattedTextField implements FocusListener {
private DocumentFilter filter = new UppercaseDocumentFilter();
private boolean isEmail = false;
public WWFormattedTextField() {
super();
init();
}
private void init() {
addFocusListener(this);
((AbstractDocument) this.getDocument()).setDocumentFilter(filter);
}
public void setIsEmail(boolean email) {
//Normally this is where I would put something like
//if email is true - allow mixed case characters
this.isEmail = email;
}
public boolean getIsEmail() {
return isEmail;
}
現在,所有的所有屏幕上WWFormattedTextFields的大寫字符類型。 這裏是UppercaseDocumentFilter()前面提到:
public class UppercaseDocumentFilter extends DocumentFilter{
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
fb.insertString(offset, text.toUpperCase(), attr);
}
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
fb.replace(offset, length, text.toUpperCase(), attrs);
}
}
正如你可以看到,這個FormattedTextField也有一個ISEMAIL屬性。當這個值爲真時 - 我想讓用戶輸入混合大小寫字符到字段中,但只有特定的字符。
任何提示/建議我如何做到這一點?
感謝您的回答,@Reimeus!也許我誤解了代碼的使用,但現在我的所有文本字段都是混合大小寫,而不管isEmail是真是假。你能否稍微闡述一下?我看到UppercaseDocumentFilter的邏輯,但不確定TextField類應該發生什麼變化。 –
我懷疑你正在設置'isEmail'標誌_after_文本域已被創建。這不會因爲你只是設置'isEmail'標誌而起作用。你需要調用['setDocument'](http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#setDocument(javax.swing.text.Document))if情況就是如此 – Reimeus