2010-09-06 24 views
0

我想創建一個列表,其中顯示了一個jEditorPane的縮略圖 - 類似於在PowerPoint中如何看到每張幻燈片的預覽。但是,出於某種原因,我的editorpane中的圖像和背景被渲染,但文本不是。一些示例代碼:創建一個jEditorPane的縮略圖,文本不會呈現

private void createThumbNailView(javax.swing.event.TreeSelectionEvent evt) {          

    JEditorPane test = new JEditorPane(); 
    JScrollPane jsp = new JScrollPane(); 

    test.setEditorKit(edkit); 
    test.setText("TEST TEXT - THIS WILL NOT BE RENDERED"); 
    test.setMargin(new java.awt.Insets(30, 30, 30, 60)); 

    jsp.setViewportView(test); 

    BufferedImage bi = new BufferedImage(300,250,BufferedImage.TYPE_INT_RGB); 
    test.paint(bi.getGraphics()); 
    jLabel1.setIcon(new ImageIcon(bi)); 
} 

我發現,如果我使用的是NetBeans中創建一個JEditorPane到GUI,然後將文本渲染確實工作。但是,如果使用基礎構造函數創建一個新的(如上面的代碼所示),則文本不會呈現。這讓我覺得佈局中有某些東西或者我需要包含的一些準備代碼才能使文本呈現。任何幫助都是值得讚賞的!

回答

0

我相信文本組件的渲染比其他組件更復雜,因爲您需要解析文本並在渲染完成之前創建文檔。我相信編輯器窗格可能會使用後臺線程或SwingUtilities.invokeLater()來幫助完成此過程。

因此,首先嚐試將圖像創建代碼包裝在SwingUtilities.invokeLater()中。或者,如果這不起作用,那麼請嘗試創建一個單獨的睡眠幾毫秒的線程,以確保在創建圖像之前已經解析了編輯器窗格Document。

+0

我想這可能是這樣的,直到我試圖用一個放置在GUI上的JEditorPane的「測試」實例替換(我正在使用NetBeans)。如果我使用由NetBeans創建的JEditorPane實例,則可以調用setText,然後在下一行代碼中繪製,並且它將呈現完美。但是,如果我在上面的代碼中創建了一個新實例,則會出現文本呈現問題。 – evan 2010-09-07 00:04:17

0

這是我,問題的原始海報。我想通了 - 問題是我沒有指定組件的大小。這讓我感到非常愚蠢,以前我沒有注意到這一點。顯然Netbeans隱藏了組件大小的部分,所以我假設組件會採用默認組件的首選大小。但是,挖深了一點後,我發現組件的大小是0,所以根本沒有任何東西被渲染,除了在組件容器外溢出的圖像(可怕!)