2011-11-26 12 views
0

は私が行います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を認識せず、代わりにrawテキストを出力します。

入力テキストは次のとおりです。

"<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 POSTを:// sscceを.org /)。スタイル指定された 'JComponent'でHTMLを使用する場合、コンポーネントのサイズを設定するのと同じくらい意味があります(見た目に応じてナンセンスになります)。 –

+0

' label.setPreferredSize(new Dimension(50、CONST_PREFERED_HEIGHT)); HTML内のスタイル内。さらに、幅や高さのいずれかを設定し、コンテンツの必要に応じてもう一方を調整することもできます。 –

+2

関連しない:a)getXXRendererComponentでコンポーネントを作成せず、コンストラクタで作成して再利用するb)JLabelをコンテナとして誤って使用しないで、コンポーネントを直接または汎用コンテナ(JPanel)コンポーネントを含むc)サイジングのヒントをハードコーディングしないでください – kleopatra

答えて

3

の代わりに:

return label; 

これを使用してみてください:

return htmlPane; 
+0

Jlistはhtmlコードを描画しますが、正しく動作しないため、自分のセルを選択できません。私は通常、JList内に既に登録されているため、またはこのラベルを置き換える方法を見つけるために、Labelを返さなければならないと思います。 – AlexTheo

+2

* "私は.."と思う* SSCCEを推測してポストしないでください。そして、私はあなたに「これを試してみてください」よりも良い答えを与えることができます。 –