我在我的應用程序中有一個文本字段。儘管它是一個文本字段,但用戶有時會在其中粘貼大量文本。此外,該問題的其他功能也設置了大量。我是否可以限制可以繪製的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()時使該文本不可用。