2013-06-20 77 views
1

我的程序最後從JTextPane(A)中取出一個StyledDocument對象,並將其傳遞給另一個JTextPane(B)。當我完成通過後,我希望JTextPane(A)清除文本和任何格式,並且基本上是該對象的新構建,其默認JTextPane設置。要做到這一點,我目前做這樣的事情:每次我想清除一個並重新創建一個新的DefaultStyledDocument時,是不是很糟糕的形式?

//make things 
JTextPane inputField = new JTextPane(); 
JTextPane outputField = new JTextPane(); 

//move inputField text (with formatting) from inputField to outputField 
StyledDocument doc = inputField.getStyledDocument(); 
EditorKit kit = inputField.getEditorKit(); 
outputField.setStyledDocument(doc); 
outputField.setEditorKit(kit); 
outputField.revalidate(); 

//reset the inputField so that it's fresh and ready for new input 
inputField.setStyledDocument(new DefaultStyledDocument()); 
inputField.setEditorKit(new StyledEditorKit()); 

我在這個例子中知道我沒有做任何移動文字或格式(只是一個空白文檔對象),但這些都是我在執行操作,並且很好奇,如果「新建」工具包和文檔是將我的JTextPane重置爲默認設置的懶惰方式。提前致謝!

+0

重新使用現有對象而不是創建新對象會更好。 – 2013-06-20 17:08:23

+1

@RafaelOsipov:你爲什麼這麼說?我看到盧卡斯的計劃沒有錯。這段代碼似乎並不在他的項目的任何時間或內存關鍵部分,並且當需要內存時,舊文檔可能會被GC'd。 –

+0

我知道在更新之前重用會更好,但這種情況並非如此,我可以簡單地重用。如果我這樣做了,我的JTextPane A和B都會引用同一個文檔對象。對其中一個JTextPane文檔的更改將反映在其他JTextPane的文檔中,因爲它們是相同的文檔。我很想知道是否可以避免這種確保併發性的方式,這是一種糟糕的形式。謝謝你的時間。 –

回答

1

恕我直言,它是絕對好的,創建一個新的文檔實例。實際上它的速度更快,因爲聽衆不更新視圖以反映空的Document,然後是新的Document's內容。

順便說一句:如果它是相同的類,不需要重置套件。這足以致電setDocument()

+0

我會一如既往地進行調整,不要重新設置套件。關於聽衆的好消息,謝謝。 –

相關問題