मैं पिछले कुछ हफ्तों से जावाएफएक्स सीख रहा हूं। यहाँ एक उच्च स्तरीय अवलोकन दिया गया है कि यह मेरी नज़र में WPF की तुलना कैसे करता है:
मेरी सभी टिप्पणियाँ JavaFX 2.0 से संबंधित हैं। यह जानकारी संभवतः परिवर्तन के अधीन होगी क्योंकि मंच अभी भी काफी अपरिपक्व है और इसे सक्रिय रूप से विकसित किया जा रहा है।
ग्राफिक्स
WPF की तरह, JavaFX एक बरकरार ग्राफिक्स रेंडरिंग सिस्टम का उपयोग करता है। उपयोगकर्ता इंटरफ़ेस में एक दृश्य ग्राफ शामिल है जो 'नोड्स' से बना है जिसे वैचारिक रूप से WPF के समान माना जा सकता है UIElement
।
JavaFX यदि उपलब्ध हो तो ग्राफिक्स रेंडर को GPU पर लोड कर देगा। ग्राफिक्स सिस्टम अन्य प्लेटफॉर्म पर विंडोज और ओपनजीएल पर डायरेक्टएक्स का उपयोग करता है।
मार्कअप
JavaFX यूजर इंटरफेस को कोड में और FXML मार्कअप के जरिए बनाया जा सकता है जो कि XAML के समान है जिसमें ऑब्जेक्ट ग्राफ को नेस्टिंग तत्वों द्वारा बनाया जा सकता है।
एफएक्सएमएल में एक्सएएमएल के समान कुछ विशेषताएं हैं जैसे कि संपत्ति बाध्यकारी (केवल सरल अभिव्यक्ति) और इवेंट हैंडलर (कोई भी चालू विधि) के लिए बाइंडिंग । ईवेंट हैंडलर्स को इन-लाइन घोषित किया जा सकता है, लेकिन आमतौर पर आप संबंधित कंट्रोलर में किसी ईवेंट से जुड़ जाते हैं।
एफएक्सएमएल फाइलों में एक संबद्ध नियंत्रक हो सकता है जो आपको जटिल ईवेंट हैंडलर घोषित करने और संपत्तियों के बीच बाइंडिंग स्थापित करने की अनुमति देता है। यह एमवीसी अर्थों में एक नियंत्रक है और WPF दुनिया में एक viewModel के समान नहीं है (आमतौर पर एक नियंत्रक में नोड्स और नियंत्रण के संदर्भ होंगे)।
WPF में एक अंतर यह है कि ऐसा प्रतीत होता है कि FXML BAML की तरह एक मध्यवर्ती द्विआधारी प्रतिनिधित्व में संकलित नहीं है । मैंने अभी तक किसी भी प्रदर्शन के मुद्दों पर ध्यान नहीं दिया है लेकिन सिस्टम का बड़े पैमाने पर उपयोग नहीं किया है। हालांकि मैंने देखा है, कि एफएक्सएमएल आमतौर पर किसी भी एक्सएएमएल से छोटा होता है क्योंकि प्लेटफॉर्म अभी भी आपको कोड लिखने के लिए प्रोत्साहित करता है और शैलियों को अलग से घोषित किया जाता है।
एफएक्सएमएल का परिचय यहां पाया जा सकता है ।
एक दृश्य बिल्डर मुफ्त (बीयर के रूप में) प्रदान किया जाता है, इसलिए यदि आपको यूआई कोडिंग हाथ पसंद नहीं है तो आप तत्वों को खींच सकते हैं और छोड़ सकते हैं, गुण सेट कर सकते हैं और अपने नियंत्रक में कोड कर सकते हैं और एफएक्सएमएल स्वचालित रूप से उत्पन्न होगा। जाहिर है कि दृश्य बिल्डर एक्सप्रेशन ब्लेंड जितना शक्तिशाली नहीं है, लेकिन विजुअल स्टूडियो द्वारा उपलब्ध कराए गए 'डिजाइनर' से यह अभी भी बेहतर है।
बाइंडिंग
JavaFX के पास बहुत शक्तिशाली संपत्ति और बाध्यकारी प्रणाली है। जावा बीन पैटर्न को उन संपत्तियों को शामिल करने के लिए विस्तारित किया गया है जो एक संपत्ति को संलग्न करते हैं (जिस तरह से WPF निर्भरता गुण गुणों का प्रतिनिधित्व करते हैं)। ये कक्षाएं ऐसे इंटरफेस को लागू करती हैं जो अमान्य प्रदान करते हैं और अधिसूचना बदलते हैं।
अमान्य सूचनाओं और परिवर्तन सूचनाओं के बीच एक अंतर है। अमान्य केवल आपको बताते हैं कि बाध्यकारी अभिव्यक्ति अब अमान्य है और पुनर्गणना की आवश्यकता है; पुनर्गणना वास्तव में तब तक नहीं होती है जब तक कि आप इसके get()
या getValue()
विधियों के माध्यम से संपत्ति के मूल्य का अनुरोध नहीं करते हैं । यदि आपने एक परिवर्तन श्रोता को पंजीकृत किया है, तो फिर, अभिव्यक्ति का तुरंत पुनर्मूल्यांकन किया जाएगा और जो कुछ भी उस संपत्ति के लिए बाध्य है वह परिवर्तनों को प्रतिबिंबित करेगा।
JavaFX इन संपत्तियों को एक निश्चित और सेट संपत्ति के साथ WPF के समान तरीके से उजागर करता है और एक विधि जो संपत्ति आवरण की एक आवृत्ति लौटाती है (जो WPF गुणों की तरह स्थिर नहीं हैं)।
कई गुणों के बीच जटिल बंधन बनाए जा सकते हैं। एक पूर्णांक संपत्ति दो अन्य (a = b + c) का योग होना चाहते हैं? कोई समस्या नहीं है, जावाएफएक्स इस तरह के संबंधों को व्यक्त करने के लिए एक धाराप्रवाह एपीआई प्रदान करता है
ए। एड (बी, सी);
यदि बी या सी में से किसी का भी मूल्य बदल जाता है तो उपयुक्त सूचनाएं जुटाई जाएंगी ताकि सिस्टम को पता चले कि ए का पुनर्मूल्यांकन करने की जरूरत है। ध्यान दें कि इस मामले में, एक अपवाद को फेंक दिया जाएगा यदि आप ए का मान रखते हैं और सेट करते हैं क्योंकि यह अन्य गुणों के लिए बाध्य है, इसलिए इस संदर्भ में इसका कोई मतलब नहीं है।
ये अभिव्यक्ति काफी जटिल ईजी a = (b + c) * (d - e)
हो सकते हैं और इसमें किसी भी संख्या में गुण शामिल हो सकते हैं। धाराप्रवाह एपीआई पढ़ने और उपयोग करने के लिए काफी आसान है, लेकिन कुछ Microsoft पुस्तकालयों द्वारा दिए गए धाराप्रवाह एपीआई में से कुछ के रूप में अच्छा नहीं है, लेकिन यह स्वयं जावाएफएक्स के बजाय जावा भाषा की सीमाओं से अधिक है।
सरल द्वि-दिशात्मक बाइंडिंग एक ही प्रकार के गुणों के बीच बनाई जा सकती है ताकि यदि एक को अपडेट किया जाए तो यह स्वचालित रूप से परिवर्तन को दर्शाता है।
यदि आप कस्टम बाइंडिंग एक्सप्रेशन बनाना चाहते हैं जो API द्वारा प्रदान नहीं किया गया है या यदि आप प्रदर्शन के बारे में चिंतित हैं तो JavaFX अपने आप को बाइंडिंग को अनुकूलित करने के लिए निम्न स्तर का एपीआई भी प्रदान करता है।
JavaFX और WPF के बीच सबसे बड़ा अंतर यह है कि मुख्य रूप से JavaFX बनाम WPF में बाइंडिंग को मार्क-अप में बाइंडिंग स्थापित करने के तरीके में किया जाता है।
गुण और बाइंडिंग का परिचय यहां पाया जा सकता है ।
शैलियाँ
JavaFX सीएसएस का उपयोग दृश्य ग्राफ में निहित नोड्स के रूप को बदलने के लिए करता है। एक पूर्ण विनिर्देश उपलब्ध है जो प्रत्येक नोड प्रकार पर सेट किए जा सकने वाले प्रकारों और गुणों की व्याख्या करता है।
जावाएफ़एक्स कुछ परिवर्धन भी प्रदान करता है जो सीएसएस को बेहतर बनाने में मदद करता है जैसे कि चर जिन्हें परिभाषित किया जा सकता है और कहीं और ईजी का उपयोग किया जा सकता है
.button {
my-custom-color: RGB(234, 44, 78);
}
.my-control {
-fx-background-color: my-custom-color
}
यह कुछ कार्यों को भी प्रदान करता है जो आपको पहले से परिभाषित अन्य रंगों से रंगों को प्राप्त करने की अनुमति देता है जो ग्रेडिएंट्स जैसी चीजों को बनाने के लिए उपयोगी है। इसका मतलब है कि रंगों के आधार पैलेट को परिभाषित किया जा सकता है और बाकी को इन मूल्यों से उत्पन्न किया जा सकता है (यह डिफ़ॉल्ट जावाएफ़एक्स सीएसएस फ़ाइल करता है)।
जावाएफ़एक्स सीएसएस आपको नोड द्वारा उपयोग किए जाने वाले लेआउट के प्रकार को परिभाषित करने की अनुमति नहीं देता है (जैसा कि यह लिखना कि सभी लेआउट को कोड में निष्पादित करने की आवश्यकता है)। यह मेरे लिए वास्तव में अच्छी तरह से काम करता है क्योंकि यह सीएसएस का एक पहलू था जो HTML के साथ उपयोग करते समय वास्तव में मुझे दर्द करता था।
व्यक्तिगत रूप से मैं सीएसएस को एक्सएएमएल शैलियों के लिए पसंद करता हूं जो मेरी पसंद के लिए बहुत अधिक क्रियात्मक हैं।
जावाएफएक्स सीएसएस के लिए एक गाइड यहां पाया जा सकता है ।
ख़ाका
JavaFX कई तरह के लेआउट पैन प्रदान करता है जो WPF द्वारा प्रदान किए गए समान हैं। एक अंतर जो मैंने देखा है वह यह है कि माप और लेआउट अनुबंध को Region
वर्ग में वंशानुक्रम श्रृंखला को और अधिक परिभाषित किया गया है ।
जैसा कि पहले उल्लेख किया गया है, लेआउट सीएसएस का उपयोग नहीं किया जा सकता है लेकिन कोड, एफएक्सएमएल का उपयोग करके या दृश्य बिल्डर का उपयोग करके बनाया जा सकता है (जो अंततः एफएक्सएमएल में परिवर्तित हो जाता है)।
नियंत्रण
JavaFX नियंत्रणों की एक बढ़ती हुई लाइब्रेरी प्रदान करता है जिसकी हम उम्मीद करते आए हैं। JavaFX और WPF के बीच एक बड़ा अंतर यह है कि नियंत्रण अनिवार्य रूप से ब्लैक बॉक्स हैं और WPF को जिस तरह से किया जा सकता है उस तरीके से फिर से टेम्पर्ड नहीं किया जा सकता है। वे WPF नियंत्रणों की तुलना में बहुत कम गुणों को उजागर करते हैं।
नियंत्रण सीएसएस के कार्यान्वयन के कुछ विशिष्ट क्षेत्रों को उजागर करते हैं, जिससे नियंत्रण के विशिष्ट क्षेत्रों को आपकी शैलियों द्वारा लक्षित किया जा सकता है। इसे नियंत्रण की उप-संरचना के रूप में जाना जाता है । ईजी CheckBox
दो उपग्रहों को उजागर करता है; बॉक्स और चेक मार्क को नियंत्रण के प्रत्येक भाग को स्वतंत्र रूप से स्टाइल करने की अनुमति देता है। ध्यान दें कि जैसा कि पहले ही वर्णित देखो एक नियंत्रण से सीएसएस का उपयोग कर बदला जा सकता है, लेकिन लग रहा है नहीं कर सकते। ईजी आप नाटकीय रूप TabPane
से WPF के साथ जिस तरह से अपने आंतरिक लेआउट पैनल बदलकर अपनी सामग्री बाहर देता है जिस तरह से बदल नहीं सकते TabControl
।
जब भी यह काफी सीमित लगता है, JavaFX में कस्टम नियंत्रण बनाने का पसंदीदा तरीका लगता है कि यह एक लेआउट पैनल से स्थिति मानक नियंत्रणों को प्राप्त करने और सीएसएस का उपयोग करके फिर से स्टाइल करने की तर्ज पर रचना का उपयोग करता है।
निष्कर्ष
कुल मिलाकर मैं इस बात से बहुत प्रभावित हूँ कि JavaFX को इस समय क्या पेशकश करनी है। Whilst यह नहीं है जहाँ WPF के रूप में परिपक्व के रूप में निकट है इसे सक्रिय रूप से विकसित किया जा रहा है और ओरेकल निश्चित रूप से इस का समर्थन कर रहे हैं। समय बताएगा कि यह सफल है या नहीं।
मैं JavaFX को एक कोशिश देने की सलाह दूंगा। प्रलेखन पढ़ें और एक छोटे से आवेदन को एक साथ रखने की कोशिश करें और देखें कि आप क्या सोचते हैं।
आपको FXExperience.com की भी जांच करनी चाहिए जो विकास टीम की जानकारी के साथ नियमित रूप से अपडेट की जाती है।