2011-11-26 73 views
0

我想作一個JListh將細胞中都有我的HTML代碼,所以我做的:JList的自定義渲染和HTML

public class HtmlCellRenderer extends DefaultListCellRenderer{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    /** 
    * 
    */ 
    public static final int CONST_PREFERED_HEIGHT = 200; 

    /** 
    * 
    */ 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus) { 
     JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, hasFocus); 
     label.setPreferredSize(new Dimension(50, CONST_PREFERED_HEIGHT)); 
     if (value != null) { 
      ExtendedJEditorPane htmlPane = new ExtendedJEditorPane(); 
      label.setLayout(new BorderLayout()); 
      htmlPane.setEditable(false); 
      htmlPane.setContentType("text/html"); 
      htmlPane.setText(value.toString()); 
      label.add(htmlPane, BorderLayout.CENTER); 
     } 

     return label; 
    } 
} 

自定義渲染器。在這裏,我創建了一個新的JEditPane(爲了在我的html中繪製一些自定義標籤,我將其擴展)並將其插入到單元格的標籤中,但結果是我的單元格不能識別該html並打印原始文本。

輸入的文字:

"<table><tr><td rowspan=\"2\"><img src=\"data:image/jpeg;base64,"+myImageData+\" align=\"left\" /></td><td><h3>Test1 </h3><hr></td></tr><tr><td><p>Test</td></tr></table>" 

列表條目對象將在執行的toString的情況下,返回此字符串。

+0

* 「?你有什麼想法」 *爲了更好地幫助越早,張貼[SSCCE(HTTP:// SSCCE .org等/)。 –

+0

'label.setPreferredSize(new Dimension(50,CONST_PREFERED_HEIGHT));'如果在一個帶風格的'JComponent'中使用HTML,它就像設置組件大小一樣有意義(或廢話,取決於你如何查看它)在HTML中的樣式中。更好的是,您可以設置其中一個寬度或高度,並根據需要調整其他內容。 –

+2

不相關:a)不要在getXXRendererComponent中創建組件,而是在構造函數中創建並重新使用b)不要錯誤地將JLabel作爲容器使用,而是實現一個呈現器,該呈現器可以直接發佈組件或通用容器(JPanel)包含組件c)不要硬編碼大小提示 – kleopatra

回答

3

相反的:在使用本

return label; 

嘗試:

return htmlPane; 
+0

現在Jlist繪製html代碼,但它不能正常工作,所以我不能選擇我的單元格。我想通常我必須返回標籤,因爲它已經在JList中註冊了,或者找到替換這個標籤的方法。 – AlexTheo

+2

*「我猜...」*停止猜測併發布SSCCE。那麼我可以給你比'試試這個'更好的答案。 –