मेरे पास पहले से ही लिखा गया जावा स्विंग ऐप है (इसलिए कोई स्विचिंग यूआई फ्रेमवर्क नहीं है) कि मैं GTKLookAndFeel का उपयोग करके कम से कम सभ्य दिखना चाहता हूं। मैंने पहले से ही लुक एंडफेल में फ़ॉन्ट और घटक आकार के अंतर जैसे चीजों के लिए जिम्मेदार ठहराया है, लेकिन एक चीज जिसे मैं समझ नहीं पा रहा हूं, यही कारण है कि मेरे पॉपअप मेनू में कोई सीमा नहीं है। ऐसा प्रतीत होता है कि वे सिंथ सीमाओं का उपयोग कर रहे हैं जो जीटीके मूल नहीं दिखते हैं। मैं धातु, विंडोज और जीटीके का समर्थन करने में सक्षम होना चाहता हूं, लेकिन ये पॉपअप भयानक लगते हैं। क्या यह एक बग है? अन्य लुक एंडफेल की सीमाओं को प्रभावित किए बिना इसे ठीक करने के लिए एक अच्छा (गैर हैकी) तरीका क्या है जो ठीक दिखता है?जावा के GtkLookAndFeel पॉपअप की सीमा क्यों नहीं है?
उत्तर
मेरी राय में जीटीके लाफ डिजाइन द्वारा तोड़ दिया गया है। यह प्रतीत होता है यादृच्छिक JCOmponents के लिए प्रोग्रामर यूआई सेटिंग्स (फ़ॉन्ट रंग सीमा पृष्ठभूमि पृष्ठभूमि) का सम्मान करता है। ऐसा इसलिए है क्योंकि यह एक .gtkrc फ़ाइल से इसकी सेटिंग्स प्राप्त करता है, सेट xXX (...) कॉल नहीं। मैं लिनक्स के लिए धातु और खिड़कियों के लिए 'मूल' के साथ रहना चाहता हूं।
प्रतिक्रिया:
जीटीके + देखो और महसूस संसाधन फ़ाइलों के माध्यम से अनुकूलित किया जा सकता है। स्विंग के जीटीके + रंगरूप निम्नलिखित एल्गोरिथ्म का उपयोग करता संसाधन फ़ाइलों का पता लगाने की: उदाहरण के लिए,
- तो प्रणाली संपत्ति swing.gtkthemefile मौजूद है उसे पार्स और बंद करो,: जावा -Dswing.gtkthemefile =/tmp/customTheme -jar SwingSet2.jar।
- यदि फ़ाइल user.home/.gtkrc-2.0 मौजूद है, तो इसे पार्स करें और जारी रखें।
- उपयोगकर्ता चयनित थीम नाम (THEMENAME) को डेस्कटॉप प्रॉपर्टी gnome.net/ThemeName के माध्यम से XSETTINGS का उपयोग करके निर्धारित किया गया है। यदि यह संपत्ति शून्य है, तो डिफ़ॉल्ट का उपयोग THEMENAME के रूप में करें। 1. यदि फ़ाइल user.home/.themes/THEMENAME/gtk-2.0/gtkrc मौजूद है तो इसे पार्स करें और रोकें। 2. यदि सिस्टम प्रॉपर्टी swing.gtkthemedir मौजूद है और फ़ाइल swing.gtkthemedir/THEMENAME/gtk-2.0/gtkrc मौजूद है, इसे पार्स करें और रोकें। 3. यदि सिस्टम प्रॉपर्टी swing.gtkthemedir मौजूद नहीं है और फ़ाइल /usr/share/themes/THEMENAME/gtk-2.0/gtkrc मौजूद है, इसे पार्स करें और रोकें। 4. आखिरकार अगर swing.gtkthemedir परिभाषित पार्स swing.gtkthemedir/THEMENAME/gtk/gtkrc, अन्यथा /usr/share/themes/THEMENAME/gtk/gtkrc को पार्स करें।
एक तरीका जीटीके + अनुकूलित किया जा सकता है थीम इंजन के माध्यम से। इंजन के मुट्ठी भर मौजूद हैं। 1.4.2 में, स्विंग डिफ़ॉल्ट, पिक्समैप, और ब्लूक्यूर्वे इंजन के लिए थीम फ़ाइलों का समर्थन करता है। अतिरिक्त जीटीके इंजनों के निर्माण की अनुमति देने के लिए एपीआई खोलने के तरीकों की जांच कर रहे हैं। उदाहरण के लिए http://www.themes.org पर जाएं।
- http://java.sun.com/j2se/1.4.2/docs/guide/swing/1.4/Post1.4.html
मेरा अनुमान है कि जावा एक और आर सी फ़ाइल से अपने विषय के ले जा रहा है या वर्तमान सीमा विकल्प समर्थित नहीं हैं है।
मैं जानता हूँ कि प्रतिक्रिया देर से लिया गया है, लेकिन अगर किसी को भी (जैसे मैंने किया था) गूगल पर इस सवाल को देखता है तो मुझे लगता है कि इस समाधान कुछ नहीं से बेहतर है:
if (UIManager.getLookAndFeel().getClass().getName().equals("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"))
aPopupMenu.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.gray));
यह के लिए काम नहीं लगता है मेन्यू पॉपअप मेनू में जोड़े गए (भले ही आप उन पर फ़ंक्शन कॉल करें), लेकिन यह प्राथमिक मेनू पर सीमा दिखाता है।
http://www.ailis.de/~k/archives/67-Workaround-for-borderless-Java-Swing-menus-on-Linux.html
पहले दृष्टिकोण बताता है कि कैसे इस्तेमाल किया जीटीके विषय तय करने के लिए:
यहाँ एक ब्लॉग लेख दो अलग दृष्टिकोण का वर्णन इस समस्या को ठीक करने के लिए है। यह सभी स्विंग अनुप्रयोगों की सभी मेनू सीमा और मेनू विभाजक समस्याओं को हल करता है।
दूसरा दृष्टिकोण जावा कोड ऑफ स्विंग एप्लिकेशन में एक वर्कअराउंड लागू कर रहा है। आप इसे अपने स्वयं के अनुप्रयोगों में उपयोग कर सकते हैं ताकि आपके उपयोगकर्ताओं को जीटीके विषय मैन्युअल रूप से ठीक करने की आवश्यकता न हो।
असंगत आरसी-फाइलें हैं।
दुर्भाग्य से http://www.ailis.de/~k/ ब्लॉग बंद है।
उबंटू/जीनोम शैल: उदा। /usr/share/themes/Adwaita/gtk-2.0/gtkrc
style "menu" {
xthickness = 1
ythickness = 1 ...
}
... style "separator_menu_item" {
xthickness = 1
ythickness = 1
... }
अद्यतन 2015/11/30: Ubuntu/एकता के लिए उल्लेख http://blog.hani-ibrahim.de/en/ubuntus-swing-gtk-laf.html => वैश्विक मेनू, देशी फोंट।
xthickness = 0
ythickness = 0
text[ACTIVE] = @base_color
लिए:
xthickness = 1
ythickness = 1
text[ACTIVE] = @fg_color
पर लिनक्स टकसाल वहाँ /usr/share/themes/[mint-theme]/gtk-2.0/style
में टकसाल-विषयों में menus.rc
फ़ाइलें अनुभाग शैली "मेनू" में परिवर्तन कर रहे हैं
अनुभाग में शैली "पुरुष
ythickness = 0
लिए:
ythickness = 1
मैं टकसाल जो काम स्वचालित रूप से करता है के लिए एक bash-script लिखा यू-मद-विभाजक "प्रविष्टि बदलने। यह सभी 3 समस्याओं को हल करता है:
- गुम मेनू सीमा।
- सक्रिय चेकबॉक्स और रेडियोधटन मेनू आइटम का गलत फ़ॉन्ट रंग (फ़ॉन्ट पृष्ठभूमि के समान रंग है और अदृश्य दिखाई देता है)।
- कोई मेनू विभाजक नहीं।
लेकिन यदि यह एक .gtkrc का पालन कर रहा है, तो पॉपअप में सीमा और छाया होनी चाहिए, क्योंकि अन्य सभी मूल ऐप्स करते हैं। –