2012-10-04 10 views
7

के लिए एक ही फ़ॉन्ट सेट करें, मैं JPanel में सभी घटक के लिए एक विशिष्ट फ़ॉन्ट सेट करना चाहता हूं लेकिन मुझे लगता है कि सवाल अभी भी सामान्य है और जेपीनेल तक ही सीमित नहीं है। मैं एक कंटेनर (जेएफआरएएम या जेपीनल) में घटक की सूची में फ़ॉन्ट कैसे सेट कर सकता हूं?सभी घटक जावा

उत्तर

3

उन घटकों के लिए फ़ॉन्ट मानों को UIManager में सेट करें जिन्हें आप बदलना चाहते हैं। UIManager वर्ग के लिए अलग गुण हो सकता है

Font labelFont = ... ; 
UIManager.put("Label.font", labelFont); 

ध्यान दें कि अलग लग रहे है और लगता है (एल & एफ) है, तो आप एक एल & एफ से यह बदलाव करते हैं: उदाहरण के लिए, आप ऐसा करके लेबल के लिए प्रयुक्त फ़ॉन्ट सेट कर सकते हैं दूसरे के लिए, आपको समस्या हो सकती है।

+0

हो रही द्वारा प्रतिशत में प्रत्येक घटक के फॉन्ट को बढ़ाने के लिए अपने कोड का उपयोग किया है मैं UIManager का उपयोग मैं आवेदन भर घटक के फ़ॉन्ट बदलने, लेकिन मैं इसे केवल एक विशिष्ट 'जेएफआरएएम' या 'जेपीनेल' में बदलने के लिए नहीं था। धन्यवाद – Luca

8

- आप UIManager उपयोग कर सकते हैं यह करने के लिए ....

उदाहरण के लिए:

public class FrameTest { 

    public static void setUIFont(FontUIResource f) { 
     Enumeration keys = UIManager.getDefaults().keys(); 
     while (keys.hasMoreElements()) { 
      Object key = keys.nextElement(); 
      Object value = UIManager.get(key); 
      if (value instanceof FontUIResource) { 
       FontUIResource orig = (FontUIResource) value; 
       Font font = new Font(f.getFontName(), orig.getStyle(), f.getSize()); 
       UIManager.put(key, new FontUIResource(font)); 
      } 
     } 
    } 

    public static void main(String[] args) throws InterruptedException { 

     setUIFont(new FontUIResource(new Font("Arial", 0, 20))); 

     JFrame f = new JFrame("Demo"); 
     f.getContentPane().setLayout(new BorderLayout()); 

     JPanel p = new JPanel(); 
     p.add(new JLabel("hello")); 
     p.setBorder(BorderFactory.createTitledBorder("Test Title")); 

     f.add(p); 

     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.setVisible(true); 
    } 
} 
+0

यदि मैं UIManager का उपयोग करता हूं तो मैं पूरे एप्लिकेशन में घटक को फ़ॉन्ट में बदलता हूं लेकिन मैं इसे केवल एक विशिष्ट 'जेएफआरएएम' या 'जेपीनेल' में बदलने के लिए नहीं चाहता था। धन्यवाद – Luca

16

यहाँ एक सरल विधि है कि आप के तहत पूरे घटकों पेड़ से फ़ॉन्ट निर्दिष्ट करने के लिए अनुमति देता है कोई कंटेनर (या सिर्फ एक साधारण घटक, कोई फर्क नहीं पड़ता):

public static void changeFont (Component component, Font font) 
{ 
    component.setFont (font); 
    if (component instanceof Container) 
    { 
     for (Component child : ((Container) component).getComponents()) 
     { 
      changeFont (child, font); 
     } 
    } 
} 

बस वाई पास करें इस विधि में हमारे पैनल और विशिष्ट फ़ॉन्ट और आप सभी बच्चों को भी रिफैक्टर मिल जाएगा।

+0

बहुत बढ़िया, यह बहुत अच्छा काम कर रहा है, मैंने आपके कोड को इस तरह थोड़ा बदल दिया है, और यह मेरी मदद कर रहा है, मैं उस कोड को उत्तर में पोस्ट कर रहा हूं –

2

Mikle अनाज से प्रेरित होकर उत्तर मैं पुराने fontsize

public static void changeFont(Component component, int fontSize) { 
    Font f = component.getFont(); 
    component.setFont(new Font(f.getName(),f.getStyle(),f.getSize() + fontSize)); 
    if (component instanceof Container) { 
     for (Component child : ((Container) component).getComponents()) { 
      changeFont(child, fontSize); 
     } 
    } 
} 
संबंधित मुद्दे