2012-09-05 18 views
15

दिखता है मैं जावा का उपयोग कर सिस्टम ट्रे में जोड़ा और प्रदर्शित करने की कोशिश कर रहा हूं। हालांकि आइकन हमेशा या तो बहुत छोटा होता है, या क्षेत्रों में इसकाट जाता है। यदि आप नहीं बता सकते हैं तो बाएं से दूसरा यह है।सिस्टम ट्रे आइकन विकृत

मैं यहाँ क्या गलत कर रहा हूं? मैं इस आइकन को पूरी तरह प्रदर्शित करने के लिए कैसे प्राप्त कर सकता हूं? सिस्टम ट्रे के लिए उपयोग करने के लिए मानक आइकन आकार क्या है?

संपादित करें: मैं AWT SystemTray और trayicon

उत्तर

25

के बाद आप डिस्क से वास्तविक छवि संसाधन लिया गया है, तो आप यह आकार आप एक "नकली" एक ऑन-द-मक्खी बनाने और इसकी चौड़ाई लेने के द्वारा की जरूरत करने के लिए आकार बदल सकते हैं।

मुझे पता चला कि यह setImageAutoSize(true) विधि का उपयोग करने से बेहतर था, क्योंकि यह विधि छवि को आसानी से स्केल नहीं करती है।

BufferedImage trayIconImage = ImageIO.read(getClass().getResource("/path/to/icon.png")); 
int trayIconWidth = new TrayIcon(trayIconImage).getSize().width; 
TrayIcon trayIcon = new TrayIcon(trayIconImage.getScaledInstance(trayIconWidth, -1, Image.SCALE_SMOOTH)); 
+1

+1, मुझे लगता है कि ओपी को इसे अपना पहला स्टॉप बनाना होगा। –

+0

बहुत अच्छा कामकाज। –

+0

क्षमा करें यह लिनक्स पर पारदर्शी पृष्ठभूमि छवि जोड़ने के लिए काम नहीं कर रहा है। – Gopal00005

8

उपयोग कर रहा हूँ एक इष्टतम आकार में आइकन प्रदर्शित करने के लिए, आप मैन्युअल रूप से सही आकार के आकार बदलने के लिए की आवश्यकता होगी। यह सही आकार ऑपरेटिंग सिस्टम और वरीयताओं के बीच भिन्न हो सकता है, इसलिए जावा टास्क बार आइकन आयाम प्राप्त करने के लिए एक तरीका प्रदान करता है, जो आपकी उदाहरण छवि के मामले में 16x16 है।

if (SystemTray.isSupported()) { 
    SystemTray tray = SystemTray.getSystemTray(); 
    Dimension trayIconSize = tray.getTrayIconSize(); 
    // resize icon image to trayIconSize 
    // create your tray icon off of the resized image 
} 
+0

मैं इसका आकार कैसे बदलूं? –

+0

एक छवि का आकार बदलना काफी सरल है; [यहां एक अच्छा ट्यूटोरियल है] (http://www.mkyong.com/java/how-to-resize-an-image-in-java/) उस पर। – Vulcan

+0

16x16 मेरे टास्कबार –

6

TrayIcon.setImageAutoSize(boolean) के अनुसार।

स्वत: आकार की संपत्ति सेट करता है। ऑटो-आकार निर्धारित करता है कि ट्रे छवि स्वचालित रूप से ट्रे पर छवि के लिए आवंटित स्थान को फिट करने के लिए आकार में है या नहीं। डिफ़ॉल्ट रूप से, ऑटो-आकार की संपत्ति झूठी पर सेट होती है।

यदि ऑटो-आकार गलत है, और छवि का आकार ट्रे आइकन स्पेस से मेल नहीं खाता है, तो छवि उस स्थान के अंदर पेंट की गई है - यदि आवंटित स्थान से बड़ी है, तो फसल हो जाएगी।

+5

+1 ... जबकि * सबसे आसान * समाधान स्वचालित रूप से स्वयं आकार के लिए ट्रे आइकन सेट करना होगा, यह दुर्भाग्यपूर्ण है कि, आंतरिक रूप से, ऐसा लगता है कि यह एक अनसुलझा एल्गोरिदम का उपयोग कर रहा है जो अधिकांश लोगों को उत्पादन के उपयोग के लिए अस्वीकार्य लगता है। ऑटो-आकार की छवि अनसुलझा होगी और किनारों वाले किनारे होंगे। मुझे संदेह है कि यह प्रदर्शन कारणों से किया जाता है। मैं आमतौर पर मैन्युअल रूप से आकार बदलता हूं: http://stackoverflow.com/a/12287388/216104 – Redandwhite

1

मैं कोड का उपयोग करने के लिए इन उत्तरों में से कुछ को जोड़कर समाप्त कर चुका हूं।

यह 100x100 से शुरू होने वाली पीएनजी से मेरे सिस्टम ट्रे में एक अच्छा दिखने वाला आइकन तैयार कर रहा है।

यह ध्यान देने योग्य है कि रेटिना मैकबुक पर आइकन खराब दिखता है। तो मैं यह देखने के लिए कहीं और जांच करता हूं कि यह मैक पर चल रहा है या नहीं, अगर यह है तो इसे लागू न करें।

public Image imageForTray(SystemTray theTray){ 

    Image trayImage = Toolkit.getDefaultToolkit().getImage("my100x100icon.png"); 
    Dimension trayIconSize = theTray.getTrayIconSize(); 
    trayImage = trayImage.getScaledInstance(trayIconSize.width, trayIconSize.height, Image.SCALE_SMOOTH); 

    return trayImage; 
} 
संबंधित मुद्दे