gpt4 book ai didi

java - 具有混合大小写字符且 DocumentFilter 设置为大写的 FormattedTextField

转载 作者:行者123 更新时间:2023-12-01 14:04:25 25 4
gpt4 key购买 nike

我的问题如下:

我有一个:

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;
}

现在,所有屏幕上的所有 WWFormattedTextField 均以大写字符键入。这是前面提到的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 属性。当该值为 true 时 - 我希望允许用户在字段中输入混合大小写字符,但仅限特定字符。

关于如何做到这一点有任何提示/建议吗?

最佳答案

UppercaseDocumentFilter 添加 isEmail 属性,以便特定过滤器可以生成大写文本

public class UppercaseDocumentFilter extends DocumentFilter {

private boolean isEmail;

public UppercaseDocumentFilter(boolean isEmail) {
this.isEmail = isEmail;
}

@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
fb.insertString(offset, isEmail? text: text.toUpperCase(), attr);
}

@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
fb.replace(offset, length, isEmail? text: text.toUpperCase(), attrs);
}
}

然后像这样设置过滤器

DocumentFilter filter = new UppercaseDocumentFilter(isEmail);
((AbstractDocument) this.getDocument()).setDocumentFilter(filter);

关于java - 具有混合大小写字符且 DocumentFilter 设置为大写的 FormattedTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com