2013-04-07 3 views
5

JEditorPane 내에 텍스트를 표시하기 위해 HTML 정렬되지 않은 목록을 사용하고 있습니다. HTML의 샘플은 다음과 같습니다JEditorPane에서 픽셀 화 된 정렬되지 않은 목록 글 머리표

<ul><li>Cautious</li> 
<li>Curious</li> 
</ul> 

이 잘 좋은 작동하지만, 이상하게 <li>에 의해 생성 된 총알이 옆에있는 텍스트와 같은 품질로 보지 않는다. (중요한 경우 Mac OS 10.7.5 실행). 원형 총알이 고르지 및 픽셀 화 :

표준 줌 :에

enter image description here

을 줌 인 :이 확대 될 때

enter image description here

으로 특히 분명,이 단지 블록 이는 대칭이 아니며 어떠한 형태의 앤티 앨리어싱도 갖지 않으므로 설득력있는 원형 글 머리 기호보다 작습니다. 옆에있는 텍스트와 비교할 때, 일반적인 확대/축소에서도 눈에 띄지 않습니다.

이 문제를 해결할 수있는 방법이 있습니까?

는 편집 : • 문자를 사용하여 (옵션 Mac의 + 8)는 픽셀 화하지 않는 텍스트의 작은 글 머리 기호를 만듭니다. 나는 물론 <ul><li>을 사용하는 대신 수동으로이 문자를 삽입 할 수 있지만, 가능하다면 HTML 정렬되지 않은 목록을 사용하고 싶습니다.

답변

4

렌더링 힌트를 사용하여 앤티 앨리어싱 속성 KEY_ANTIALIASING을 켭니다.

당신은 몇 가지 렌더링 globally 힌트 설정,하지만 KEY_ANTIALIASING 작동하지 않는 것, 그래서 당신은 JEditorPanepaint() 메소드를 오버라이드 (override) 할 필요가있다.

public class HTMLTest {  

     public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
      String html = "<ul><li>Cautious</li><li>Curious</li></ul>"; 
      JEditorPane pane = new JEditorPane("text/html", html) { 

       public void paint(Graphics g) { 
       Graphics2D g2d = (Graphics2D) g.create(); 
       g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
       super.paint(g2d); 
       g2d.dispose(); 
       } 

      }; 
      pane.setVisible(true); 

      JOptionPane.showMessageDialog(null, pane); 
      } 
     });  
     } 
} 
+0

완벽하게 작동합니다! 안타깝게도 힌트를 렌더링 할 때 가리키는 링크에는 키 앤티 앨리어싱 (텍스트 만)이 작동하지 않는다는 메모가 있습니다. 아직도, 이것은 어떤 발치없이 작동합니다. 현상금을 즐겨라! – Thunderforge

+0

감사합니다. 내 대답을 편집하여 귀하의 의견을 반영합니다. – Enwired

2

글 머리 기호를 수정해야합니다. 보다 멋진 글 머리표 이미지를 만든 다음 CSS를 편집기 창에 추가하여 새로운 글 머리 기호 이미지를 사용하게하십시오.

JEditorPane pane = new JEditorPane(); 
String u = "C:/path/to/bullet.png"; 
HTMLEditorKit htmlEditorKit = (HTMLEditorKit) pane.getEditorKit(); 
StyleSheet styleSheet = htmlEditorKit.getStyleSheet(); 
styleSheet.addRule(String.format("ul{list-style-image:url(%s);margin:0px 20px;", u)); 
+0

로드 할 이미지를 가져올 수 없습니다. 'new File (u) .exists()'는 true를 반환하지만 완전히 다른 이미지를 시도해도 기본 불릿 점만 볼 수 있습니다. 또한 내부 이미지를 사용하지 않아도되는 방법을 선호합니다. 대신'(U + 2022) '를 사용할 수 있습니까? – Thunderforge

+0

현재 코드를 수정 한 리뷰를 수정했습니다. 그 이유는 그것이 나를 위해 작동하지 않았다는 것을 알았습니다.'u'는 URL이기 때문에'file : ///'로 시작해야합니다. 또한 특정 JEditorPane 생성자가 사용되면 코드가 전혀 작동하지 않는다는 것을 알게되었습니다. 솔루션은 이제 작동하지만 외부 이미지에 의존하지 않고도 픽셀 화 문제를 해결하기 때문에 다른 솔루션을 더 좋아합니다. – Thunderforge