2016-10-09 12 views
5

मैंने नवीनतम जावा 9 प्रारंभिक एक्सेस संस्करण को डाउनलोड और स्थापित किया, और यह जानकर खुशी हुई कि विंडोज़ पर जावा स्विंग एप्लिकेशन अब सही आकार पर घटकों को प्रस्तुत करता है। अब HiDPI डिस्प्ले वाले मेरे ग्राहकों को आधे इच्छित चौड़ाई और ऊंचाई पर मेरे ऐप का उपयोग करने की आवश्यकता नहीं है।जावा 9 को हायडीपीआई डिस्प्ले पर उच्च-रिज़ॉल्यूशन वाली छवियों का उपयोग कैसे करें?

हालांकि मैंने देखा कि मेरे स्विंग एप्लिकेशन में, मेरे अपने आइकनों को चौड़ाई और ऊंचाई को दोगुनी करने के लिए स्केल किया जा रहा है, जिससे उन्हें झटके लगते हैं।

मेरे पास सामान्य आकार (जैसे foobar.png) और डबल चौड़ाई/ऊंचाई (जैसे [email protected]) पर सभी आइकनों का पूरा सेट है। मैं ऐप्पल नामकरण सम्मेलनों का उपयोग करता हूं।

मैं जावा 9 को आसानी से ढूंढने और किसी भी छवि के उच्च रिज़ॉल्यूशन संस्करण को आसानी से ढूंढने के लिए कैसे प्राप्त करूंगा, इसके लिए मैन्युअल रूप से कोड किए बिना?

एक कोड नमूना हमेशा एक प्रश्न स्पष्ट बनाता है, तो क्या जावा 9 में एक बहु-रिज़ॉल्यूशन आइकन क्लास है जिसका उपयोग मैं निम्नलिखित कोड संकलित और चलाने के लिए कर सकता हूं?

import javax.swing.*; 

public class ScratchSpace { 

    public static void main(String[] args) throws Exception { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     SwingUtilities.invokeLater(() -> { 
      JFrame frame = new JFrame("I work in HiDPI!"); 

      // can I replace the following line with some magical new method that automatically loads the same icon at multiple resolutions 
      // so that Swing chooses the correct one when rendering, depending on the current scale of the current display? 
      Icon icon = new IconWithMultipleSizes("foobar.png"); 

      JLabel label = new JLabel("I'm a label with an icon.", icon, SwingConstants.LEFT); 
      frame.setContentPane(label); 

      frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
      frame.pack(); 
      frame.setLocationRelativeTo(null); 
      frame.setVisible(true); 
     }); 
    } 
} 

मुझे लगता है कि ऐसी कक्षा होनी चाहिए, लेकिन मुझे यह नहीं मिल रहा है।

+0

अब तक मुझे जावा 9 में एक क्लास मिली है जिसे java.awt.image.MultiResolutionImage कहा जाता है जो बताता है कि यह वही करता है जो मैं चाहता हूं। मैं अभी भी इस बारे में जानकारी ढूंढ रहा हूं कि इसे कैसे काम पर लाया जाए। –

उत्तर

1

जावा 9 स्रोत कोड को समझने के बाद, मेरा निष्कर्ष यह है कि हालांकि जावा एपीआई में एक मल्टीरेज़ोल्यूशन इमेज क्लास मौजूद है, फिर भी इसका उपयोग जावा पर नहीं किया जा रहा है। विंडोज पर टूलकिट। Java 9 MultiResolutionImage के उदाहरण बनाने के लिए कोड java.awt.Toolkit के ओएस एक्स-विशिष्ट उदाहरण पर मौजूद है।

मेरे इस धारणा है कि यह अभी भी Oracle की कार्यसूची पर जावा 9.

+3

यह भी देखें [* जेईपी 251: बहु-संकल्प छवियां *] (http://openjdk.java.net/jeps/251)। – trashgod

+0

BaseMultiResolutionImage के लिए वर्तमान दस्तावेज़ यह इंगित करते हैं कि यह किसी भी तरह से ग्राफिक्स ऑब्जेक्ट के डीपीआई को देखता है जिसे इसे खींचा जा रहा है और सबसे छोटी उपयोग योग्य छवि चुनता है, लेकिन यह करने के लिए ग्राफिक्स ऑब्जेक्ट का उपयोग कैसे करता है यह अभी तक मुझे स्पष्ट नहीं है। – Trejkaz

0

को HiDPI समर्थन जोड़ने OpenJDK के this खंड में के भाग के रूप का वर्णन java.awt.image के लिए एक API है। java.awt.Graphics का मतलब डीपीआई मेट्रिक्स के आधार पर सही प्राप्त करने के लिए है।

तब तक मुझे लगता है कि आप एक डीपीआई स्केल कारक की जांच कर सकते हैं, फिर छवि को उस डीपीआई पैमाने के संकल्प के साथ खींचें। लेकिन वह निराशाजनक होगा।

हालांकि, ऐसा लगता है कि this other page में ऐसी कक्षा है जो बहु रिज़ॉल्यूशन छवियों के बीच अंतर करने में सक्षम हो सकती है, आपको बस इसे आयात करना होगा।

मैं अभी भी उस दूसरे लिंक को देख रहा हूं यह देखने के लिए कि मैं इसे कैसे काम कर सकता हूं, लेकिन यह आशाजनक लग रहा है।

+0

"आप एक डीपीआई स्केल फैक्टर की जांच कर सकते हैं" ... मुझे जावा पर जावा 9 में ऐसा करने का कोई तरीका नहीं मिल रहा है ... क्या आप एक रास्ता जानते हैं? –

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