2009-06-02 4 views
3

Nehmen wir an, ich habe ein JTextPane, das ein HTML-Dokument zeigt.Erhöhung der Schriftgröße eines JTextPane, das HTML-Text anzeigt

Ich möchte, dass auf Knopfdruck die Schriftgröße des Dokuments erhöht wird.

Leider ist das nicht so einfach wie es scheint ... I found a way to change the font size of the whole document, but that means that all the text is set to the font size that I specify. Was ich möchte, ist, dass die Schriftgröße proportional zu dem, was bereits in dem Dokument war, erhöht wird.

Muss ich über jedes Element im Dokument iterieren, die Schriftgröße ermitteln, eine neue Größe berechnen und zurücksetzen? Wie kann ich eine solche Operation durchführen? Was ist der beste Weg?

Antwort

1

Sie könnten wahrscheinlich CSS verwenden und nur die Schriftart ändern.

Da es das HTML wie es rendert, kann das Ändern der CSS-Klasse genug sein.

4

In dem Beispiel, das Sie verknüpft haben, finden Sie einige Hinweise zu dem, was Sie versuchen zu tun.

Die Linie

StyleConstants.setFontSize(attrs, font.getSize()); 

ändert die Schriftgröße des JTextPane und setzt es auf die Größe der Schriftart, die Sie als Parameter an diese Methode übergeben. Was möchten Sie, um es auf eine neue Größe basierend auf der aktuellen Größe festzulegen.

//first get the current size of the font 
int size = StyleConstants.getFontSize(attrs); 

//now increase by 2 (or whatever factor you like) 
StyleConstants.setFontSize(attrs, size * 2); 

Dies wird dazu führen, dass die Schriftart der JTextPane doppelte Größe hat. Sie könnten natürlich langsamer wachsen.

Jetzt möchten Sie eine Schaltfläche, die Ihre Methode aufrufen wird.

JButton b1 = new JButton("Increase"); 
    b1.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      increaseJTextPaneFont(text); 
     } 
    }); 

So können Sie eine Methode ähnlich der im Beispiel wie folgt schreiben:

public static void increaseJTextPaneFont(JTextPane jtp) { 
    MutableAttributeSet attrs = jtp.getInputAttributes(); 
    //first get the current size of the font 
    int size = StyleConstants.getFontSize(attrs); 

    //now increase by 2 (or whatever factor you like) 
    StyleConstants.setFontSize(attrs, size * 2); 

    StyledDocument doc = jtp.getStyledDocument(); 
    doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, false); 
} 
+0

Er wollte, dass „die Schriftgröße in proportionaler Skala erhöht wurde, was bereits in dem Dokument. " In Ihrem Beispiel werden jedoch alle Schriftarten im Dokument auf die gleiche Größe festgelegt. – ka3ak