मैंने प्रलेखन को देखा और मुझे ऐसा करने का एक अंतर्निहित तरीका नहीं दिख रहा है। getStylesheets
Parent
में एकमात्र स्टाइलशीट-संबंधित विधि है, और यह केवल "स्टाइलशीट से लिंक करने वाले स्ट्रिंग यूआरएल" स्वीकार करता है, स्टाइलशीट स्वयं नहीं। यह एक सामान्य ObservableList
देता है, इसलिए इसके वापसी मूल्य में विभिन्न प्रकार के लिए कोई विशेष तरीका नहीं है; केवल एक सामान्य add
। यह getResource
URL
लौटा रहा है, और toExternalForm()
केवल उस URL ऑब्जेक्ट का एक स्ट्रिंग संस्करण लौटा रहा है।
हालांकि, एक चीज है जिसे आप आजमा सकते हैं: data URI। एक स्टाइलशीट फ़ाइल में जेनरेट किए गए यूआरआई में गुजरने के बजाय, डेटा यूआरआई में पास करें, जिनकी सामग्री स्टाइलशीट है। मैं अगर एपीआई यूआरआई उस तरह स्वीकार करेंगे पता नहीं है, हालांकि, यह देखते हुए CSS Reference GuidegetStylesheets
के दस्तावेज में जुड़े हुए कहता है कि
एक शैली पत्रक यूआरएल एक पूर्ण URL या सापेक्ष URL हो सकता है।
यह देखने के लिए कि क्या यह काम करता है, वास्तव में एक साधारण डेटा यूआरआई आज़माएं। आप this online tool का उपयोग कर एक उत्पन्न कर सकते हैं। जावा एक डेटा यूआरआई स्वीकार करता है, तो आप बस कुछ विधि कॉल कि एक डेटा URI का एक स्ट्रिंग में कनवर्ट करता है, कुछ इस तरह के साथ अपने सीएसएस युक्त स्ट्रिंग रैप करने के लिए की जरूरत है:
pane.getStylesheets().add(new DataURI(
".button:ok { -fx-background-color: green; }\n"+
".button:ko { -fx-background-color: red; }").toString());
वर्ग DataURI
काल्पनिक है। यदि जावाएफएक्स मैन्युअल रूप से जेनरेट किए गए डेटा यूआरआई को स्वीकार करता है, तो आपको एक लाइब्रेरी मिलनी होगी जो DataURI
स्वयं को कक्षा प्रदान करेगी; मुझे यकीन है कि कोई कहीं मौजूद है।
Node
के लिए String
के रूप में इनलाइन सीएसएस निर्दिष्ट करने का एक तरीका भी है, जो लगभग आप जो खोज रहे हैं। इसका उल्लेख CSS Reference Guide:
सीएसएस शैलियों स्टाइल शीट या इनलाइन शैलियों से आ सकता है। स्टाइल शीट को दृश्य ऑब्जेक्ट के stylesheets
चर में निर्दिष्ट यूआरएल से लोड किया जाता है। यदि दृश्य ग्राफ़ में नियंत्रण होता है, तो एक डिफ़ॉल्ट उपयोगकर्ता एजेंट स्टाइल शीट लोड होती है। इनलाइन शैलियों को नोड setStyle
एपीआई के माध्यम से निर्दिष्ट किया जाता है। इनलाइन शैलियों style="…"
एचटीएमएल तत्व की विशेषता के समान हैं।
हालांकि, यह लग रहा है जैसे कि यह सीएसएस में चयनकर्ताओं, केवल नियमों का समर्थन नहीं करता - तो बल्कि .red { color: red; }
कह से, आप केवल color: red;
लिखने में सक्षम हो जाएगा, और यह कि Node
के सभी बच्चों पर लागू होगा। यह आपकी इच्छा की तरह नहीं लगता है। तो एक यूआरआई एकमात्र आशा है।
संपादित करें: हालांकि यह एक स्मार्ट विचार है (मुझे पहले डेटा यूआरआई के बारे में पता नहीं था) यह काम नहीं करता है। मेरे पास एक ही आवश्यकता है इसलिए मैंने कोशिश की।यह एक अपवाद बढ़ा नहीं करता है लेकिन वहाँ लॉग में एक चेतावनी है और शैली लागू नहीं कर रहे हैं: का उपयोग कर प्रदान की उपकरण निम्न डेटा यूआरआई उत्पन्न
.root{
-fx-font-family: "Muli";
-fx-font-weight: lighter;
-fx-font-size: 35pt;
-fx-padding: 0;
-fx-spacing: 0;
}
और:
मैं इस शैली का इस्तेमाल: (क्षमा में
scene.getStylesheets().add("data:text/css;charset=utf-8,.root%7B%0D%0A%20%20%20%20-fx-font-family%3A%20%22Muli%22%3B%0D%0A%20%20%20%20-fx-font-weight%3A%20lighter%3B%0D%0A%20%20%20%20-fx-font-size%3A%2035pt%3B%0D%0A%20%20%20%20-fx-padding%3A%200%3B%0D%0A%20%20%20%20-fx-spacing%3A%200%3B%0D%0A%7D");
परिणाम:
data:text/css;charset=utf-8,.root%7B%0D%0A%20%20%20%20-fx-font-family%3A%20%22Muli%22%3B%0D%0A%20%20%20%20-fx-font-weight%3A%20lighter%3B%0D%0A%20%20%20%20-fx-font-size%3A%2035pt%3B%0D%0A%20%20%20%20-fx-padding%3A%200%3B%0D%0A%20%20%20%20-fx-spacing%3A%200%3B%0D%0A%7D
मेरी दृश्य करने के लिए इसे लागू करना मेरी फ्रेंच, AVERTISSEMENT = चेतावनी):
janv. 07, 2015 12:02:03 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
AVERTISSEMENT: Resource "data:text/css;charset=utf-8,%23header%7B%0D%0A%20%20%20%20-fx-background-color%3A%23002D27%3B%0D%0A%20%20%20%20-fx-font-size%3A%2035pt%3B%0D%0A%20%20%20%20-fx-text-fill%3A%20%23fff%3B%0D%0A%7D" not found.
तो उदासी JavaFX डेटा यूआरआई के बारे में पता नहीं हो रहा है।
यदि आप फ्रेमवर्क स्तर कोड लिख रहे हैं और यूआरएल स्ट्रीम हैंडलर फैक्ट्री के एकमात्र संभावित ओवरराइड का उपयोग नहीं करना चाहते हैं, तो हल्का वजन विधि के लिए मेरा उत्तर नीचे देखें जो स्थिर कारखाने को ओवरराइड नहीं करेगा। यदि आपको स्ट्रीम फैक्ट्री सेट करने का प्रयास करने का अपवाद मिलता है, तो आपके पास पहले से ही कुछ अन्य कोड हो चुके हैं, और आपको यूआरएल क्लास के स्रोत में मिले आंतरिक "सर्विस लोडर" सेमेन्टिक्स का उपयोग करना होगा। यह आपको एक स्ट्रीम फैक्ट्री बनाने के बिना एक हैंडलर पंजीकृत करने देता है। – Ajax
मुझे लगता है कि मूल पोस्टर जिसने अपना उत्तर चुना है, शायद इसे नीचे दिए गए समाधान में नहीं बदलेगा, लेकिन किसी भी व्यक्ति के लिए जो लाइब्रेरी या फ्रेमवर्क लिख रहा है, वास्तव में, वास्तव में, वास्तव में डिफ़ॉल्ट यूआरएल स्ट्रीम हैंडलर को ओवरराइड नहीं करना चाहिए ; इसके बजाय, आपको यूआरएल क्लास द्वारा उपयोग किए जाने वाले सेवा प्रदाता ढांचे का उपयोग करना चाहिए। यूआरएल के दस्तावेज़ीकरण को पढ़ें और आप अपने लिए देखेंगे कि आपको डिफ़ॉल्ट स्ट्रीम हैंडलर को ओवरराइड करने की आवश्यकता नहीं है (और कभी नहीं होना चाहिए)। – Ajax