2010-01-11 12 views
10

विंडोज 7 में, यदि आप नियंत्रण कक्ष-> उपस्थिति और वैयक्तिकरण -> प्रदर्शन "टेक्स्ट और अन्य वस्तुओं को बड़ा या छोटा बनाते हैं" के माध्यम से फ़ॉन्ट आकार बदलते हैं, तो यह न केवल समायोजित करता है मेनू आकार, लेकिन नोटपैड, वर्डपैड, फ़ायरफ़ॉक्स जैसे ऐप्स के पाठ सामग्री आकार भी।जावा स्वचालित रूप से विंडोज 7 फ़ॉन्ट आकार समायोजन

जावा को मैन्युअल रूप से स्केल किए बिना जावा को स्वचालित रूप से स्केल करने का कोई तरीका है?

उत्तर

0

यह पूरी तरह से निर्भर करेगा कि आप किस GUI टूलकिट का उपयोग कर रहे हैं। मैं लगभग निश्चित हूं कि उदाहरण के लिए एसडब्ल्यूटी स्वचालित रूप से नए आकार उठाएगा (क्योंकि यह देशी विजेट का उपयोग करता है)। मुझे पता है कि एडब्ल्यूटी भी हो सकता है। क्या आप निर्दिष्ट कर सकते हैं कि आप किस टूलकिट का उपयोग कर रहे हैं और क्या आपने यह निर्धारित किया है कि यह पहले से ही नहीं कर रहा है जो आप चाहते हैं (और संभवतः कैसे)?

6

इस के दो भाग हैं:

  1. अपने घटकों, फोंट, आदि हो रही
  2. पैमाने पर करने के पैमाने

स्विंग के लिए करने के लिए अपने लेआउट हो रही है, पहले भाग के लिए आसान है - यह सब एक कॉल के साथ शुरू होता है।

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

विंडोज़ पर, यह आपके छोटे/बड़े फोंट (डीपीआई) सेटिंग का सम्मान करेगा।

यहाँ एक त्वरित परीक्षण एप्लिकेशन मैं एक साथ फेंक दिया, प्रदर्शन है कि यह कैसे विंडोज 7 में मेरी मशीन पर लग रहा है @ 96dpi (सामान्य फ़ॉन्ट आकार) और से दो स्क्रीनशॉट हैं @ 144dpi (150%)

पहले डिफ़ॉल्ट फ़ॉन्ट आकार नमूना:

Swing app with Windows using normal font sizes

बड़ी (150%) फ़ॉन्ट आकार सेट के साथ

अब:

Swing app with Windows using Larger font sizes

रनों के बीच कोई कोड परिवर्तन नहीं है, केवल नई डीपीआई सेटिंग्स के साथ & लॉग आउट कर रहा है। मैंने यह निर्धारित करने के उद्देश्य से एक निश्चित फ्रेम आकार निर्धारित किया है कि मेरा कंटेनर आकार में स्केल नहीं कर रहा है, जिससे फिट होने के लिए मेरे लेबल को धक्का दिया गया।

यहाँ मेरी स्रोत कोड है - & पेस्ट में कटौती और यह अपने आप चलाएँ:

import java.awt.FlowLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

public class SwingFontTest 
{ 
    private static void createGUI() 
    { 
     JButton button = new JButton("my button with Some Text"); 
     JLabel label = new JLabel("and a label"); 

     JPanel panel = new JPanel(new FlowLayout()); 
     panel.add(button); 
     panel.add(label); 

     JFrame frame = new JFrame("Title!"); 
     frame.setContentPane(panel); 
     frame.setSize(300,125); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     try 
     { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() 
      { 
       createGUI(); 
      } 
     }); 
    } 

} 

देखो & महसूस डिफ़ॉल्ट आकार की आपूर्ति, लेकिन यह जीयूआई लेखक उनके लेआउट में स्केलेबल इकाइयों का उपयोग करने के पर निर्भर है। यह प्रयास करता है (स्केलेबल लेआउट भी वेबपृष्ठों पर दर्द होता है!), लेकिन यह निश्चित रूप से प्राप्य है।

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

देर हो चुकी है - तो यह अभी के लिए है।

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