2013-04-07 23 views
5

Tôi đang sử dụng một danh sách không có thứ tự HTML để hiển thị một số văn bản trong một JEditorPane. Một mẫu của HTML trông như thế này:Đạn danh sách không có thứ tự trông được pixelated trong JEditorPane

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

này hoạt động tất cả tốt và tốt, nhưng kỳ lạ đạn tạo ra bởi <li> không nhìn được chất lượng tương tự như các văn bản đó là bên cạnh. (Chạy Mac OS 10.7.5 nếu nó quan trọng). Những viên đạn tròn trông có hình khối và pixelated:

zoom bình thường:

enter image description here

phóng to:

enter image description here

Như đặc biệt là hiển nhiên khi nó được phóng to, điều này chỉ là một khối các điểm ảnh không đối xứng và thiếu bất kỳ hình thức chống răng cưa nào, làm cho điểm đạn tròn ít thuyết phục hơn. So với văn bản bên cạnh nó, nó trông "tắt" với một con mắt sáng suốt, ngay cả ở mức thu phóng bình thường.

Có cách nào để tôi có thể khắc phục sự cố này không?

EDIT: Sử dụng • nhân vật (tùy chọn + trên máy Mac) tạo ra một điểm đạn nhỏ trong văn bản mà không nhìn pixelated. Tất nhiên tôi có thể chèn ký tự này theo cách thủ công thay vì sử dụng <ul><li>, nhưng tôi muốn sử dụng danh sách thứ tự không có thứ tự HTML nếu có thể.

Trả lời

4

Sử dụng gợi ý hiển thị để bật thuộc tính chống răng cưa KEY_ANTIALIASING.

Bạn đặt một số gợi ý hiển thị globally, nhưng điều đó dường như không hoạt động cho KEY_ANTIALIASING, vì vậy bạn cần ghi đè phương thức paint()JEditorPane.

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

Hoạt động hoàn hảo! Thật không may, liên kết mà bạn chỉ đến để hiển thị gợi ý trên toàn cầu có ghi chú cho biết rằng liên kết này không hoạt động đối với tính năng chống răng cưa chính (chỉ văn bản). Tuy nhiên, điều này hoạt động mà không có bất kỳ cản trở nào. Thưởng thức tiền thưởng! – Thunderforge

+0

Cảm ơn. Tôi đã chỉnh sửa câu trả lời của mình để kết hợp nhận xét của bạn. – Enwired

2

Bạn cần sửa đổi điểm bullet. Tạo một hình ảnh của một điểm bullet trông đẹp hơn, và sau đó thêm CSS vào cửa sổ soạn thảo để làm cho nó sử dụng hình ảnh viên đạn mới của bạn.

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

Tôi không thể tải hình ảnh. 'new File (u) .exists()' trả về true, nhưng tôi chỉ thấy điểm bullet mặc định, ngay cả khi tôi thử một hình ảnh hoàn toàn khác. Ngoài ra, tôi muốn một phương pháp không yêu cầu tôi sử dụng hình ảnh bên trong. Tôi có thể sử dụng '•' (U + 2022) để thay thế không? – Thunderforge

+0

Tôi hiện đang có bản chỉnh sửa để xem xét sửa mã. Tôi phát hiện ra rằng lý do nó không hiệu quả với tôi là 'u' phải bắt đầu bằng' file: /// 'vì nó là một URL. Ngoài ra, tôi phát hiện ra rằng mã không hoạt động chút nào nếu một hàm tạo JEditorPane nhất định được sử dụng. Giải pháp hiện hoạt động, nhưng tôi thích giải pháp khác tốt hơn vì giải quyết vấn đề pixelation mà không phải dựa vào hình ảnh bên ngoài. – Thunderforge

Các vấn đề liên quan