2015-04-04 10 views
6

मैं javaFX के लिए नया हूँ। मेरे द्वारा बनाए गए एक स्वनिर्धारित खोज बॉक्स जावा में (TextField फैली), छवि की जाँच करें:जावा में पहले से बनाए गए नए घटक के लिए दृश्य निर्माता बनाने के लिए FXML फ़ाइल कैसे बनाएं?

enter image description here

मैं एक परीक्षण वर्ग के साथ यह परीक्षण किया है और यह काम कर रहा।

मैं अब पता करने के लिए अगर यह अपनी FXML फ़ाइल बनाने के लिए संभव है की तुलना में दृश्य बिल्डर को यह घटक जोड़ने चाहते हैं? इसे कैसे करना है ? अग्रिम में धन्यवाद।

उत्तर

12

कैसे SceneBuilder

में एक जार से एक घटक आयात करने के लिए आप एक जार में अपने घटक डाल दिया और SceneBuilder में आयात कर सकते हैं। आपको अपने घटक के लिए दृश्य Builder लाइब्रेरी पैनल में जोड़ने के लिए FXML फ़ाइल बनाने की आवश्यकता नहीं है।

उपयोगकर्ता पुस्तिका JavaFX की Adding Custom Components to the Library अनुभाग देखें।

एक जार या FXML फ़ाइल से कस्टम GUI घटक आयात करने के लिए:

  1. करें आयात जार/FXML लाइब्रेरी पैनल के मेनू से फ़ाइल आदेश, या खींचें जार या FXML फ़ाइल सीधे आपके सिस्टम की मूल फ़ाइल प्रबंधक (एक्सप्लोरर या खोजक) से और इसे लाइब्रेरी पैनल

  2. ओपन डायलॉग विंडो में छोड़ दें, JAR या FXML फ़ाइल के स्थान पर नेविगेट करें जिसे आप आयात करना चाहते हैं। Figure 8-4 में दिखाए गए के समान आयात संवाद प्रदर्शित होता है। जेएआर फ़ाइल की सामग्री निरीक्षण की गई है और के रूप में निर्धारित सभी जावा क्लास संवाद विंडो में उपयुक्त कस्टम घटक प्रदर्शित होते हैं। FXML फ़ाइल की सामग्री को यह सुनिश्चित करने के लिए पार्स किया गया है कि घटक जोड़ा गया है जो वैध और स्वयं निहित है।

  3. आयात संवाद विंडो से, उन वस्तुओं के आइटम से आइटम का चयन या चयन रद्द करें जिन्हें आप आयात करने में सक्षम हैं।

  4. आयात घटक पर क्लिक करें। आयातित आइटम लाइब्रेरी पैनल के कस्टम अनुभाग में जोड़े गए हैं। वे तुरंत इस्तेमाल किया जा सकता है और वे लाइब्रेरी में जारी रहती है के बाद भी दृश्य बिल्डर पुनरारंभ

ध्यान दें, SceneBuilder भी बस सीधे कोड घटकों के बजाय FXML आधारित घटकों के आयात का समर्थन करता है। यह उत्तर केवल उन कोडों को आयात करने पर चर्चा करता है जिनमें FXML शामिल नहीं है।

नमूना आयातित घटक उपयोग

यहाँ एक कस्टम खोज क्षेत्र घटक है कि मैं SceneBuilder में आयात विधि ऊपर उल्लिखित का उपयोग कर रहा है।

search sample

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

नमूना SceneBuilder जेनरेट किए गए कोड

fxml फ़ाइल जो आधारित पर डिजाइन यहाँ शामिल किया गया है SceneBuilder द्वारा उत्पन्न किया गया था। नोट, यह केवल एक परीक्षण दृश्य था जिसे मैंने पहले से आयातित घटक का परीक्षण करने के लिए सीनबुल्डर के साथ बनाया था - यह घटक आयात प्रक्रिया का हिस्सा नहीं था।

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.text.*?> 
<?import org.jewelsea.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 


<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <Label text="Search Field Import Test"> 
     <font> 
      <Font size="16.0" /> 
     </font> 
     </Label> 
     <SearchField /> 
    </children> 
    <padding> 
     <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> 
    </padding> 
</VBox> 

नमूना (आयात योग्य) घटक कोड

खोज बॉक्स जो आयात किया गया था के लिए कोड है: के लिए

package org.jewelsea; 

import javafx.geometry.Insets; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 

public class SearchField extends StackPane { 
    private final TextField textField; 
    private final Button searchButton; 
    private final Label searchResults; 

    public SearchField() { 
     textField = new TextField(); 
     textField.setPromptText(
       "Search Text" 
     ); 

     searchButton = new Button("Search"); 

     searchResults = new Label(); 

     VBox layout = new VBox(
       20, 
       new HBox(
         10, 
         textField, 
         searchButton 
       ), 
       searchResults 
     ); 
     layout.setPadding(new Insets(10)); 

     searchButton.setOnAction(event -> 
       searchResults.setText(
         "Search result for " + textField.getText() 
       ) 
     ); 

     getChildren().setAll(
       layout 
     ); 
    } 
} 

घटक पूर्व आवश्यक वस्तुएँ

आदेश में काम करने की प्रक्रिया, कुछ चीजें हैं जिन्हें आपको सुनिश्चित करने के लिए आवश्यक है:

  1. आपका घटक वर्ग नोड को बढ़ाता है।
  2. आपके घटक वर्ग में कोई तर्क निर्माता नहीं है।
  3. आपकी घटक कक्षा और कोई तर्क कन्स्ट्रक्टर सार्वजनिक नहीं है।
  4. आपकी घटक श्रेणी पैकेज में है (उदा। Org.jewelsea) - इसमें कोई पैकेज सेट नहीं हो सकता है।
  5. आपकी घटक कक्षा को एक जेएआर फ़ाइल में पैक किया गया है जिसे उपरोक्त वर्णित अनुसार सिनेबिल्डर में आयात किया गया है।

समस्या निवारण

आप JAR आयात करने के बाद आप एक जार आयात का प्रयास किया है, तो आप समस्या निवारण (जो मदद कर सकता है या सिर्फ प्रदान कर सकते हैं मदद करने के लिए जार विश्लेषण नीचे प्रलेखित समारोह का उपयोग कर सकते मुद्दों कर रहे हैं आपको और अधिक भ्रमित करने के लिए कुछ गुप्त जानकारी)।

jar file analysis

+0

आपके उत्तर के लिए धन्यवाद। मैंने ग्रहण परियोजना को एक जार फ़ाइल में निर्यात किया था। लेकिन दृश्य निर्माता किसी भी घटक का पता नहीं लगा रहा है? जावा फ़ाइल को किसी भी अतिरिक्त सूचना की आवश्यकता है? या एक संरचना का पालन करें? – ben

+1

हे भगवान! इन सबके लिए धन्यवाद! मुझे यह पसंद है ! वास्तव में धन्यवाद ! मैं अपने घटकों को फिर से काम करूंगा: डी धन्यवाद – ben

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