2013-04-07 10 views
5

Używam nieuporządkowanej listy HTML do wyświetlenia tekstu w JEditorPane. Próbkę HTML wygląda następująco:Nieuporządkowana lista Punktory wyglądają pikselowo w JEditorPane

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

Działa to wszystko dobrze i dobre, ale dziwnie kule generowane przez <li> nie wyglądają na takie same jak jakość tekstu jest to obok. (Uruchamianie Mac OS 10.7.5, jeśli ma to znaczenie). Okrągłe kule wyglądają topornie i piksele:

normalny zoom:

enter image description here

powiększony:

enter image description here

Jako szczególnie widoczne, gdy jest powiększony, to tylko blok pikseli, które nie są symetryczne i nie mają żadnej formy wygładzania, co powoduje mniej niż przekonujący okrągły punkt punktowy. W porównaniu z tekstem znajdującym się obok niego, wyszukuje "oko" nawet w normalnym powiększeniu.

Czy jest jakiś sposób, aby to naprawić?

EDIT: • Używanie znaku (opcja + na komputerze Mac) tworzy mniejszą podpunkt w tekście, że nie wygląda piksele. Mógłbym oczywiście wstawić ten znak ręcznie, zamiast używać <ul><li>, ale chciałbym użyć nieuporządkowanej listy HTML, jeśli mogę.

Odpowiedz

4

Użyj wskazówek dotyczących renderowania, aby włączyć właściwość antyaliasingu KEY_ANTIALIASING.

ustawić niektóre renderowania podpowiedzi globally, ale to nie wydają się działać dla KEY_ANTIALIASING, więc trzeba zastąpić metodę JEditorPanepaint().

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

Działa idealnie! Niestety, link wskazany do renderowania wskazówek na całym świecie ma informację, że nie działa w przypadku antyaliasingu klawiszy (tylko tekst). Mimo to działa bez żadnych problemów. Ciesz się nagrodą! – Thunderforge

+0

Dzięki. Zmieniłem moją odpowiedź, aby uwzględnić Twój komentarz. – Enwired

2

Musisz zmodyfikować punkty. Utwórz obraz lepiej wyglądającego punktu wypunktowania, a następnie dodaj arkusz CSS do okienka edytora, aby użyć nowego obrazu punktora.

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

Nie mogę pobrać obrazu. 'new File (u) .exists()' zwraca true, ale widzę tylko domyślny punkt, nawet jeśli próbuję zupełnie innego obrazu. Ponadto wolałbym metodę, która nie wymagała użycia wewnętrznego obrazu. Czy mógłbym zamiast tego użyć '' '(U + 2022)? – Thunderforge

+0

Mam obecnie poprawkę w recenzji, która naprawia kod. Dowiedziałem się, że powodem, dla którego nie zadziałało to "u", musi zaczynać się od 'file: ///', ponieważ jest to adres URL. Ponadto dowiedziałem się, że kod nie działa w ogóle, jeśli używany jest pewien konstruktor JEditorPane. Rozwiązanie działa teraz, ale lubię inne rozwiązanie lepiej, ponieważ rozwiązuje problem pikselizacji bez konieczności polegania na zewnętrznym obrazie. – Thunderforge

Powiązane problemy