2011-11-26 3 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을 인식하지 못하고 대신 원시 텍스트를 인쇄합니다.

입력 텍스트는 다음과 같습니다

"<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를 게시 "당신이 어떤 생각을 가지고 있습니까?"* 더 나은 도움이 필요한 경우 :

return label; 

시도 이것을 사용 // sscce .org /). –

+0

는'label.setPreferredSize (새 치수 (50, CONST_PREFERED_HEIGHT는));'스타일'JComponent'에 HTML을 사용하는 경우,이 구성 요소의 크기를 설정 (당신이 그것을 보는 방법에 따라, 또는 넌센스) 단지 많은 의미가 있습니다 HTML의 스타일 내에서. 더 좋게는 너비 또는 높이 중 하나를 설정하고 다른 하나는 내용의 필요에 따라 조정할 수 있습니다. –

+2

무관 : a) 하나 성분 직접 vends 렌더러 범용 컨테이너를 구현하는 대신에, 컨테이너하지 잘못 사용 JLabel의 수행) 생성자 및 재사용 B에서 생성 대신 getXXRendererComponent 구성 요소를 생성하지 않는 (인 JPanel) 구성 요소가 들어 있습니다. c) 크기 지정 힌트를 하드 코딩하지 마십시오. – kleopatra

답변

3

대신 :

return htmlPane; 
+0

Jlist가 html 코드를 그렸지만 올바르게 작동하지 않아서 셀을 선택할 수 없습니다. 나는 그것이 JList 안에 이미 등록되어 있거나이 Label을 대체 할 방법을 찾기 때문에 보통 Label을 반환해야한다고 생각합니다. – AlexTheo

+2

* "나는 추측한다."* SSCCE를 추측하고 게시하지 마라. 그러면 나는 '이거 해봐'보다 나은 대답을 줄 수있어. –

관련 문제