2013-02-04 14 views
13

HTML में में हम जैसेसेटिंग स्टाइलशीट एलान के तौर पर FXML

<link rel="stylesheet" ... > 

प्रोग्राम के रूप में शैली स्थापित करने के लिए सक्षम होने का ब्योरा करने के लिए उपयोग किया जाता है लेकिन स्थापित करने स्टाइलशीट मैं JavaFX के लिए पाया का उदाहरण प्रोग्राम के रूप में शैली की स्थापना,

scene.getStylesheets().add("/resources/shell.css"); 
तरह की आवश्यकता होती है

क्या एचटीएमएल में किए गए तरीके से FXML में स्टाइलशीट सेट करना संभव है?

उत्तर

13

आप 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(); 
11

हाँ, उदाहरण के उदाहरण 4-8 की this tutorial के लिए देख एक नोड के लिए निम्न विशेषता लगाने से:

stylesheets="fxmlexample/Login.css" 

उदा

<GridPane stylesheets="fxmlexample/Login.css"> 
+1

मुझे यह पसंद है कि यह विधि से अधिक संक्षिप्त (और शिकार करने में आसान है, क्योंकि यह शुरुआती टैग में होना चाहिए)। – gbmhunter

0

आप JavaFX साथ fxml उपयोग करने के लिए आप कुछ समय डाउनलोड करने और SceneBuilder उपयोग करने के लिए ले जाना चाहिए जा रहे हैं। एक बार जब आप सीएसएस स्टाइल शीट का उपयोग करते हैं तो सरल हो जाता है। बेशक, नेटबीन का उपयोग करें क्योंकि सीनबिल्डर चल रहा है, नेटबीन डीएक्सएमएल बॉयलरप्लेट एप्लिकेशन में प्रीबिल्ट डीएक्सएमएल फ़ाइल खोलने से यह सीन्यूबिल्डर में संपादन के लिए स्वचालित रूप से खुला रहता है। एक बार जब आप सभी स्टैकप्लेन, बटन और लेबल निकाल देते हैं और नियंत्रण और कंटेनर डालते हैं जो आप वास्तव में चाहते हैं, तो सीधे शैली शीट को सीनबिल्डर में जोड़ें। मुख्य मेनू में, पूर्वावलोकन के तहत, सीएसएस स्टाइल शीट के लिए मेनू चयन होता है। इसे चुनने से सबमेनू आता है जो आपको स्टाइल शीट फ़ाइल लोड करने देगा।

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

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