我在我的应用程序中有一个文本字段。尽管它是一个文本字段,但用户有时会在其中粘贴大量文本。此外,该问题的其他功能也设置了大量。我是否可以限制可以绘制的JTextField中的文本长度,同时仍然存储全文?
有时会有太多的文本让JVM在fontmanager.dll中出现访问冲突。 Oracle似乎没有兴趣解决问题本身,所以我想至少尝试避免它。
限制用户输入的文本数量显然是不可接受的(否则这将是最明显的解决方案),但允许设置然后禁用文本字段是可以接受的。当文本被绑定回模型时,它应该再次包含全文。
由于这本质上是一个视图中的错误,我认为修复应该在视图中,而不是在模型中解决它并在其中添加其他属性。
我第一次尝试又是这样的:
public class LimitedTextField extends JTextField {
static final int LIMIT = 10000;
private String fullString;
@Override
public void setText(String text) {
if (text != null && text.length() > LIMIT) {
fullString = text;
setEnabled(false);
} else {
fullString = null;
super.setText(text);
setEnabled(true);
}
}
@Override
public String getText() {
if (fullString != null) {
return fullString;
} else {
return super.getText();
}
}
}
这并通过天真的单元测试,但一旦我写了一个额外的测试BeansBinding,我发现它不工作,因为BeansBinding不绑定到文本属性,而是绑定到文档,模拟文本属性。所以实际上,getText()总是在该测试中返回一个空字符串。
我现在正在考虑尝试做一个文档实现,它将做我想做的事情,但在文档级别做这种技巧确实不容易。我可以看到它拥有的所有方法,但是我找不到限制文本的好方法,而不会在调用getText()时使该文本不可用。