आप set stylesheets on Parent nodes कर सकते हैं का उपयोग कर:
parent.getStylesheets().add("/resources/shell.css");
तत्वों क्योंकि और प्रयोग करने योग्य FXML में सार्वजनिक JavaFX जावा एपीआई से प्राप्त कर रहे हैं, तो आप भी एक FXML स्टाइलशीट का उपयोग कर एक जनक नोड के लिए स्टाइलशीट प्रदान कर सकते हैं गुण तत्व (या एक दूसरे के रूप में एक विशेषता)। सभी कंटेनर जनक का विस्तार के रूप में, आप किसी भी कंटेनर आप FXML में संदर्भ पर एक या अधिक कस्टम स्टाइलशीट सेट कर सकते हैं:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import java.net.URL?>
....
<?scenebuilder-stylesheet fruitcombo.css?>
<AnchorPane prefHeight="205.0" prefWidth="168.0"
styleClass="layout"
fx:controller="fruit.FruitComboController"
xmlns:fx="http://javafx.com/fxml">
<children>
....
</children>
<stylesheets>
<URL value="@fruitcombo.css" />
</stylesheets>
</AnchorPane>
एक fxml फ़ाइल से एक सीएसएस फ़ाइल को संदर्भित की एक पूरी निष्पादन नमूने के लिए this sample में fxml फ़ाइल देखें।
अच्छा के एक जोड़े उपरोक्त कोड में सुविधाओं के लिए कर रहे हैं:
स्टाइलशीट URL में अजीब @
उपसर्ग सख्ती की जरूरत नहीं है, लेकिन JavaFX के location resolution का लाभ लेने के लिए इस्तेमाल किया जा सकता है। "स्थान संकल्प ऑपरेटर (विशेषता मान के लिए" @ "उपसर्ग द्वारा दर्शाया गया है) यह निर्दिष्ट करने के लिए प्रयोग किया जाता है कि एक विशेषता मान को एक साधारण स्ट्रिंग के बजाय वर्तमान फ़ाइल के सापेक्ष स्थान के रूप में माना जाना चाहिए।"
निम्न पंक्ति रनटाइम पर की आवश्यकता नहीं है, लेकिन अगर आप उस उपकरण का उपयोग कर रहे हैं डिजाइन समय में आवश्यक सीएसएस स्टाइलशीट का पता लगाने का SceneBuilder tool द्वारा किया जाता है:
<?scenebuilder-stylesheet fruitcombo.css?>
अद्यतन टिप्पणी
के बारे में
चेतावनी: FXML 1.0 है, यह 2.0 में काम नहीं कर रहा, javafx.fxml.LoadException: URL एक मान्य प्रकार नहीं है।
यह टिप्पणी मुझे थोड़ा गलत लगता है। जहां तक मुझे पता है, वर्तमान में ऐसी कोई चीज़ नहीं है जो FXML 2.0 के रूप में है।
टिप्पणीकर्ता को लोडएक्सप्शन प्राप्त करने का कारण यह था क्योंकि इस पोस्ट में संकेतक स्निपेट java.net.URL
कक्षा को FXML दस्तावेज़ में आयात नहीं कर रहा था। मैंने java.net.URL
आयात को शामिल करने के लिए स्निपेट को अपडेट किया और स्निपेट के इरादे को स्पष्ट करने के लिए कुछ और ellipsis ....
जोड़ें। एक ellipsis का अर्थ है "डॉट्स की एक श्रृंखला जो आम तौर पर किसी शब्द, वाक्य या पूरे खंड को किसी मूल पाठ को बिना किसी मूल अर्थ को बदलने के जानबूझ कर चूकती है"।
इस उत्तर को सबसे अच्छी तरह से समझने के लिए यह लिंक किए गए नमूना कोड को संकलित और चलाने का सुझाव दिया जाता है। FXMLLoader में InputStream लोड कार्यों का उपयोग कर
मैं दृढ़ता से एक स्थान के साथ एक नया FXMLLoader निर्माण, बजाय FXMLLoader.load(InputStream) फ़ंक्शन का उपयोग की सलाह के खिलाफ
चेतावनी। जब स्थिर लोड() फ़ंक्शन का उपयोग किया जाता है, तो संबंधित स्थान संदर्भों को हल नहीं किया जा सकता है क्योंकि FXML फ़ाइल के लिए कोई आधार स्थान नहीं है।
अर्थात, और ऐसा नहीं करते हैं:
InputStream input = this.getClass().getResourceAsStream("layout.fxml");
FXMLLoader loader = new FXMLLoader.load(input);
Parent content = loader.load();
इसके बजाय कार्य करें:
String url = this.getClass().getResource("layout.fxml").toExternalForm();
FXMLLoader loader = new FXMLLoader(url);
Parent content = loader.load();
मुझे यह पसंद है कि यह स्टाइलशीट्स> विधि से अधिक संक्षिप्त (और शिकार करने में आसान है, क्योंकि यह शुरुआती टैग में होना चाहिए)। –
gbmhunter