2012-02-17 13 views
8

युक्त JTextPane में फ़ॉन्ट बदलें मेरे पास एक JTextPane है और मेरे पास उस JTextPane के भीतर कुछ टेक्स्ट है। हालांकि, क्योंकि मैं फलक के भीतर एचटीएमएल का उपयोग कर रहा हूं, टेक्स्ट को टाइम्स न्यू रोमन में स्वचालित रूप से बदल दिया गया है।जावा - HTML

मैं जीटीक्स्टपेन के भीतर फ़ॉन्ट प्रकार को जीयूआई के डिफ़ॉल्ट फ़ॉन्ट (JTextPane का फ़ॉन्ट जब यह HTML नहीं है) पर सेट करने का प्रयास कर रहा हूं। हालांकि मैं सिर्फ फ़ॉन्ट को एक फ़ॉन्ट पर सेट नहीं कर सकता क्योंकि यह ऑपरेटिंग सिस्टम से अलग है, इसलिए मैं डिफ़ॉल्ट फ़ॉन्ट प्राप्त करने का एक तरीका ढूंढना चाहता हूं और उसके बाद मेरे पास डिफ़ॉल्ट फ़ॉन्ट को बदलना चाहता हूं।

प्रदर्शित करने के लिए टाइम्स न्यू रोमन में टेक्स्ट को कैसे बदला जाता है, यह दिखाने के लिए कि निम्नलिखित कोड प्रारूप का उपयोग किया गया है। मैं अपना लक्ष्य प्राप्त करने के लिए इसे कैसे बदल सकता हूं?

import javax.swing.JFrame; 
import javax.swing.JTextPane; 


public class GUIExample { 

    public static void main(String[] args) { 

     JFrame frame = new JFrame("My App"); 
     frame.setSize(300,300); 
     JTextPane pane = new JTextPane(); 
     pane.setContentType("text/html"); 
     pane.setText("<html><b>This is some text!</b></html>"); 
     frame.add(pane); 

     frame.setVisible(true); 

    } 

} 

धन्यवाद!

उत्तर

7

सबसे आसान तरीका शायद कुछ इस तरह है:

string fontfamily = pane.getFont().getFamily(); 

है कि आप डिफ़ॉल्ट फ़ॉन्ट दे देंगे। तो बस सीएसएस का उपयोग कर इसे लागू होते हैं:

pane.setText("<html><body style=\"font-family: " + fontfamily + "\"<b>This is some text!</b></html>"); 
+0

यह मैं इसके साथ बाहर की मदद की, मैं किसी अन्य वर्ग में एक नई पद्धति लागू एक घटक का डिफ़ॉल्ट फ़ॉन्ट वापस जाने के लिए और उसके बाद का उपयोग के समान HTML के भीतर अपने खुद। धन्यवाद। – mino

1

JComponent HTML रेंडरर का अपना फ़ॉन्ट का उपयोग करता है, और नहीं JComponent का है। घटक को प्रस्तुत करने के लिए, आपको HTML स्ट्रिंग में फ़ॉन्ट विशेषताएँ सेट करने की आवश्यकता है। अन्य बातों के अलावा, आप एक उदाहरण के रूप फ़ॉन्ट परिवार, आकार, बोल्ड/इटैलिक, आदि

सेट करने की आवश्यकता होगी, तो आप निम्न कर सकता है:

JTextPane pane = new JTextPane(); 
Font font = pane.getFont(); 
pane.setContentType("text/html"); 
pane.setText("<html><font face=\"" + font.getFamily() + "\" size=\"" + font.getSize() + "\"></font>This is some text!</html>"); 

यह काफी एक बनाने के लिए तुच्छ हो जाएगा फ़ंक्शन जो आपके लिए यह करता है। इसे एक JComponent और एक स्ट्रिंग पास करें, और यह सभी फ़ॉन्ट टैग सहित आपके लिए HTML टेक्स्ट बनाएगा।

+0

मैंने आपकी विधि की कोशिश की लेकिन यह मेरे लिए काम नहीं कर रहा था, क्या आपने इसे बिल्कुल प्रदर्शित किया था। – mino

+1

उन पैडेंटिक टैगों में से एक है जिसे तकनीकी रूप से कई अन्य टैग के अंदर फिर से निर्दिष्ट करने की आवश्यकता है - आप इसे बाहर के चारों ओर लपेट नहीं सकते हैं। तो यह समाधान सामान्य सामग्री के लिए बहुत भंगुर है। –

22

निम्नलिखित चाल करना होगा:

pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 

(ध्यान दें कि JTextPane फैली JEditorPane।)

अद्यतन (अगस्त 2016): सेटिंग के लिए

देखो जीवित रहने के लिए & महसूस और सिस्टम में परिवर्तन (जैसे विंडोज़ नियंत्रण कक्ष में फ़ॉन्ट्स बदल गए) लाइन को यहां रखा जा सकता है:

@Override 
    public void updateUI() { 
     super.updateUI(); 
     putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 
    } 

(यह भी निर्माण के दौरान कहा जाता है।)

+0

भयानक, धन्यवाद! – Mark