2012-06-28 39 views
3

我發現任何時候我用HTML在JLabel上設置文本,即使我的標籤文本可能非常短,也會分配一個8KB緩衝區。在挖掘一下,它看起來像罪魁禍首在於DefaultStyledDocument:如何修改HTML JLabel以使用少於8k的緩衝區?

public static final int BUFFER_SIZE_DEFAULT = 4096; 

它看起來就像每一個文本改變時,屬性更改偵聽火災,一個新的HTMLDocument的分配,與默認的GapContent緩衝區大小。 UTF-16中的4k個字符爲我提供了8K價值的內存,用於一個小小的標籤。

據我所知,在文檔分配之前,我無法更改該值。根據第二個答案,我認爲反思可能會派上用場,根據Change private static final field using Java reflection,但看起來我運氣不好。事後我想過調整差距緩衝區,但這似乎很棘手。

有人遇到過這個嗎?我希望我將不得不變得非常尷尬,甚至有機會...

謝謝!

回答

1

我還沒有遇到過這個問題,但是您可以使用this constructor使用GapContent指定的初始長度嗎?默認的構造函數使用默認的緩衝區大小。

public DefaultStyledDocument() 
{ 
    this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext()); 
} 

所以只使用new HTMLDocument(new GapContent(/*whatever works for you*/), new StyleContext())

+0

當然,雖然我不能找出一個簡單的方法來代替我自己HTMLDocument的在JLabel的。它似乎只是簡單地調用帶有HTML內容的setText將觸發一連串的事件,創建帶有4096 BUFFER_SIZE_DEFAULT的GapContent,並從該文檔生成一個View。如果有一種簡單的方法來替換較小的Document,或者告訴它截斷它的GapContent,那將會很好! – AndyI