2013-04-07 18 views
5

Sto utilizzando un elenco non ordinato HTML per visualizzare del testo all'interno di un JEditorPane. Un campione del HTML simile a questo:Elenco elenco non ordinato Sembra pixelato in JEditorPane

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

Questo funziona tutto molto bello, ma stranamente le pallottole generati da <li> non guardare per essere la stessa qualità del testo, è accanto a. (Esecuzione di Mac OS 10.7.5 se è importante). I proiettili circolari accentuare eccessivamente e pixel:

zoom normale:

enter image description here

ingrandita:

enter image description here

Come particolarmente evidente quando si è ingrandita, questo è solo un blocco di pixel non simmetrici e privi di qualsiasi forma di anti-aliasing, il che rende un punto di mira circolare non convincente. Rispetto al testo accanto ad esso, sembra "spento" a un occhio perspicace, anche a zoom normale.

Esiste un modo per risolvere il problema?

EDIT: Usando il carattere • (opzione + su Mac) crea un punto di proiettile più piccola del testo che non guarda pixel. Naturalmente potrei inserire questo carattere manualmente piuttosto che usare <ul><li>, ma mi piacerebbe usare un elenco non ordinato HTML se posso.

risposta

4

Usa il rendering suggerimenti per accendere proprietà anti-aliasing KEY_ANTIALIASING.

si imposta una certa resa accenna globally, ma questo non sembra funzionare per KEY_ANTIALIASING, quindi è necessario eseguire l'override del metodo di 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

Funziona perfettamente! Sfortunatamente, il link che hai indicato per il rendering di suggerimenti a livello globale ha una nota che dice che non funziona per l'anti-aliasing chiave (solo testo). Tuttavia, questo funziona senza intoppi. Goditi la taglia! – Thunderforge

+0

Grazie. Ho modificato la mia risposta per incorporare il tuo commento. – Enwired

2

È necessario modificare i punti elenco. Crea un'immagine di un punto elenco dall'aspetto migliore, quindi aggiungi CSS nel riquadro dell'editor per far sì che utilizzi la tua nuova immagine bullet.

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

Non riesco a caricare l'immagine. 'new File (u) .exists()' restituisce true, ma vedo solo il punto elenco predefinito, anche se provo un'immagine completamente diversa. Inoltre, preferirei un metodo che non richiedesse l'utilizzo di un'immagine interna. Potrei usare il '•' (U + 2022)? – Thunderforge

+0

Attualmente ho una modifica in revisione che corregge il codice. Ho scoperto che il motivo per cui non ha funzionato per me è stato 'u' necessario iniziare con' file: /// 'perché è un URL. Inoltre, ho scoperto che il codice non funziona affatto se si utilizza un certo costruttore JEditorPane. La soluzione ora funziona, ma mi piace l'altra soluzione perché risolve il problema della pixelizzazione senza dover contare su un'immagine esterna. – Thunderforge