2012-12-26 9 views
6

स्विंग अनुप्रयोगों के लिए, घटकों के लिए डिफ़ॉल्ट फ़ॉन्ट सेटिंग्स वर्तमान विषय में हैं और UIManager का उपयोग कर प्राप्त किया जा सकता है:जावा अन्य आवेदन के लिए कम से कम (या के लिए रेंज) फ़ॉन्ट आकार स्विंग

public class JavaTesting { 
    public static void main(String[] args) { 
     System.out.println(UIManager.get("Label.font")); 
    } 
} 

यह JAVA_HOME में समायोजित किया जा सकता/उदाहरण के लिए साथ आवेदनों की श्रृंखला के लिए lib/swing.properties:

swing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel 

या के साथ आदेश पंक्ति पर सेट करें:

java -Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel MyApp 

या एप्लिकेशन स्वयं ही इसे देखता है और महसूस करता है और यह मान कॉन्फ़िगरेशन (फ़ाइल) में कहीं भी संग्रहीत है। यह काम करता है, क्योंकि आवेदन नज़र सेट और खुद के लिए महसूस कर सकते हैं, जैसे:

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");  

यह सब अच्छा लग रहा है, लेकिन अनुप्रयोग अक्सर छोटे फोंट (जैसे महत्वहीन लेबल के लिए स्थिति पट्टी संदेश) या बड़े फ़ॉन्ट जरूरत है (कुछ शीर्षक के साथ लेबल)। क्या इसके लिए कोई अनुशंसित तरीका है?

Font tmp = (Font)UIManager.get("Label.font"); 
if (tmp != null) { 
     Font font = tmp.deriveFont(10.0f); 
     _statusBarFontInfo = new FontInfo(font); 
} 

इस उदाहरण कोड स्थिति पट्टी पूरी तरह से पढ़ने योग्य नहीं है, लेकिन ज्यादातर घटक: स्रोत कोड गिलहरी एसक्यूएल से नकल - उच्च घनत्व पर नजर रखने का एक उपयोगकर्ता के रूप में मैं, कि उपयोग कोड इस तरह जावा अनुप्रयोगों के बहुत त्यागने के लिए था नए, बड़े फ़ॉन्ट में समायोजित कर रहे हैं। 1.50 रेंज के साथ- एक बुरा कोडिंग habbit के रूप में लग रहा है -

मेरे अपने आवेदन बनाने के लिए, मैं कुछ अनुपात (विषय फ़ॉन्ट का उदाहरण 50% से 150%), लेकिन हार्डकोड 0.50 उपयोग कर सकते हैं। और यह उन अनुप्रयोगों के साथ समस्या को ठीक नहीं करता है जिनके लिए मेरे पास स्रोत कोड नहीं है। यह थीम/एल & एफ से संबंधित है (देखें & महसूस करें, देखो और महसूस करें)। उदाहरण:

FontUIResource Label_font_resource = (FontUIResource)javax.swing.UIManager.get("Label.font"); 
Font Label_font = Label_font_resource; 
Font Label_font_bigger = Label_font.deriveFont(Label_font.getSize2D() * 1.5f); 

इससे पहले कि मैं स्विंग डिफ़ॉल्ट लोगों की जगह कस्टम घटक, या Graphics2D.setFont समायोजन, या किसी अन्य डरावना सामान की तरह कुछ बदसूरत हैक्स कोशिश यह पूछ लायक है। :-)

संपादित करें: केवल एक चीज मौजूद है, आकार भिन्नता है, जो केवल निम्बस थीम द्वारा समर्थित है। अनुमत मूल्य "मिनी", "छोटा", "नियमित", "बड़ा" हैं। उदाहरण:

JComponent mini = new JButton("mini"); 
mini.putClientProperty("JComponent.sizeVariant", "mini"); 

हालांकि, निंबस विषय के लिए स्रोत कोड की जांच कर रहे, यह संभव नहीं है बस इन मूल्यों को समायोजित करने के लिए है (उदाहरण के लिए "बड़ी" के लिए पैमाने पर करने के 150%), यह वास्तव में हार्ड-कोडेड है!

package javax.swing.plaf.nimbus; 

public final class NimbusStyle extends SynthStyle 
{ 
    public static final String LARGE_KEY = "large"; 
    public static final String SMALL_KEY = "small"; 
    public static final String MINI_KEY = "mini"; 
    public static final double LARGE_SCALE = 1.15D; 
    public static final double SMALL_SCALE = 0.857D; 
    public static final double MINI_SCALE = 0.714D; 

यह मान ही बहुत उन्नत उपयोगकर्ता द्वारा संपादित किया जा सकता है (उदाहरण के लिए JAVA_HOME में लगातार पूल संपादित/lib/कहा जाता कार्यक्रम के साथ rt.jar "rej") - मैं इसे करने की कोशिश की, और यह काम करता है, लेकिन ऐसा नहीं

if ("large".equals(str)) 
{ 
    this.scrollBarWidth = (int)(this.scrollBarWidth * 1.15D); 
    this.incrGap = (int)(this.incrGap * 1.15D); 
    this.decrGap = (int)(this.decrGap * 1.15D); 
} 

निष्कर्ष: किसी: नहीं, जावा देखो, उदाहरण के लिए - 't क्योंकि वे वास्तव में हार्ड कोड किए गए हमेशा काम (!!) कई जगहों पर स्थिरांक (मानक पुस्तकालय यह वास्तव में अच्छी गुणवत्ता है?) और महसूस करता है कि अब इसका समर्थन नहीं करता है। मैं अनुपात का उपयोग करने का सुझाव देता हूं, उदा। 0.7 - 1।डिफ़ॉल्ट फ़ॉन्ट आकार के 3।

JLabel smallLabel = new JLabel("some text"); 
smallLabel.setFont(smallLabel.getFont().deriveFont(0.8f * smallLabel.getFont().getSize2D())); 
+0

[अच्छा सवाल +1] (http://stackoverflow.com/q/9958004/714968) – mKorbel

+0

टैग निकालें "निम्बस"। थीम "निंबस" के साथ इसका कोई लेना-देना नहीं है, यह सिर्फ एक उदाहरण था। यह सभी विषयों से संबंधित है। – peenut

+0

स्विंग में देखो और महसूस करें, थीम – mKorbel

उत्तर

1

Font बदलने के बजाय, निंबस में छोटे, छोटे, नियमित और बड़े घटकों के लिए sizeVariant है। इस आलेख में अधिक उदाहरण हैं: Resizing a Component

myButton.putClientProperty("JComponent.sizeVariant", "mini"); 
0

मैं अपने घुमाओ अनुप्रयोगों में क्या किया है एक फ़ॉन्ट वर्ग शामिल है। फ़ॉन्ट के लिए आवश्यक प्रत्येक अन्य स्विंग घटक फ़ॉन्ट क्लास को कॉल करता है।

import java.awt.Font; 

public class MinesweeperFont { 

    protected static final String FONT_NAME = "Comic Sans MS"; 

    public static Font getBoldFont(int pointSize) { 
     return new Font(FONT_NAME, Font.BOLD, pointSize); 
    } 

} 

अब इस मामले में, मुझे केवल एक फ़ॉन्ट प्रकार की आवश्यकता है। मैंने एप्लिकेशन को फ़ॉन्ट आकार चुनने दिया।

आप अपने इच्छित फ़ॉन्ट आकार के लिए एक विधि को परिभाषित कर सकते हैं, शायद उन्हें छोटे, मध्यम और बड़े कहते हैं, ताकि आप बाद में विधियों को एक अलग बिंदु आकार या टाइप करने के लिए टाइप कर सकें।

चूंकि आपका पूरा एप्लिकेशन इन फ़ॉन्ट स्थैतिक तरीकों को कॉल करता है, इसलिए आपको केवल एक ही स्थान पर फ़ॉन्ट परिवर्तन करना होगा।

+0

मैं अपने प्रश्न में असंतोषजनक के रूप में आपके समाधान का वर्णन कर रहा हूं: बोल्ड "अनुपात" भाग देखें। मैं पूछ रहा हूं कि यह बेहतर किया जा सकता है - जावा अनुप्रयोगों (जैसे "देखो और महसूस करें") के बीच सेटिंग्स साझा करने के लिए, और/या मौजूदा जावा अनुप्रयोगों के लिए इसे कैसे ठीक किया जाए, जो पूर्ण फ़ॉन्ट आकार का उपयोग करते हैं, आनुपातिक नहीं। – peenut

संबंधित मुद्दे