2012-09-12 26 views
6

मैं डब्ल्यूपीएफ के साथ बहुत अनुभवी हूं और जावाएफएक्स 2.0 में नया हूं। मैं सिल्वरलाइट प्रोजेक्ट को जावाएफएक्स 2.0 में ले जाने वाला हूं। दो अप्रेस किताबें और कई धागे मेरे प्रश्नों का उत्तर नहीं दे सके (शायद मैं अपने डब्ल्यूपीएफ प्रभावित उम्मीदों के कारण जवाब देखने या समझने में असफल रहा)।जावाएफएक्स 2.0 - स्टाइल/टेम्पलेट मौजूदा नियंत्रण

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

मुझे पता है कि मौजूदा जावाएफएक्स 2.0 नियंत्रण को कैसे त्वचा पर रखना है, लेकिन मुझे नहीं पता कि रेडियोबटन को इस तरह से शैली/त्वचा कैसे शैलीबद्ध करें।

डब्ल्यूपीएफ में मैं बस अपने रेडियोबटन शैली के लिए एक नया टेम्पलेट बनाता हूं ... जैसा कि मैंने उल्लेख किया है, शायद ये डब्ल्यूपीएफ जावाएफएक्स 2.0 के लिए प्रभावित उम्मीदें मेरी बाधा हैं।

धन्यवाद ...

संपादित करें:

लगता है जैसे कि यह संभव है एक और मौजूदा नियंत्रण के लिए खाका बनाने के लिए नहीं है (?): JavaFX 2.0 render controls inside control

तो लागू करने के लिए सबसे अच्छा तरीका क्या होगा मेरे रेडियोबटन? मैं ToggleGroup के बारे में परेशान हूं ...

+0

क्या आप चयनित और अचयनित राज्यों की छवियां डाल सकते हैं? – jewelsea

+0

संभावित, लेकिन जरूरी नहीं है क्योंकि छवि पारदर्शी होगी और अचयनित होने पर ग्रेस्केल हो जाएगी। – thinkU

+0

भ्रम के लिए खेद है, मेरा मतलब है कि बटन राज्यों का क्या सवाल है, इस सवाल की तरह दिखने के लिए है ताकि यह एक ऐसा उत्तर तैयार करना आसान हो जो आपके मामले को सीधे हल करता है। – jewelsea

उत्तर

5

शैली या टेम्पलेट जावाएफएक्स नियंत्रणों के लिए कई दृष्टिकोण हैं।

  1. पूर्व निर्मित जावाएफएक्स नियंत्रण css के माध्यम से शैलीबद्ध हैं।

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

  3. अक्सर, आप Pane या Group लेआउट में मौजूदा नियंत्रणों का एक गुच्छा रख कर कस्टम घटकों का निर्माण कर सकते हैं। विधि या वर्ग को पैरामीटर करने के द्वारा जो समेकित घटक बनाता है, आप प्रभावी रूप से कोड के माध्यम से कस्टम घटक निर्माण टेम्पलेट कर सकते हैं। यहां ऐसी विधि (और सीएसएस के माध्यम से शैलीबद्ध) का उपयोग करके digital and analogue clock components का एक उदाहरण दिया गया है।

  4. आप introduction to fxml document में दृष्टिकोण का उपयोग कर विभिन्न fxml फ़ाइलों के माध्यम से एक कस्टम घटक के लेआउट का प्रबंधन भी कर सकते हैं। Fxml को velocity जैसे टेम्पलेटिंग भाषा का उपयोग करके उत्पन्न किया जा सकता है, या कुछ अलग-अलग स्थिर fxml फ़ाइलों को विभिन्न लेआउट के लिए लिखा जा सकता है। स्थैतिक या जेनरेट किए गए एफएक्सएमएल को वेबसर्वर से गतिशील रूप से भी परोसा जा सकता है, यदि आवश्यक हो तो गतिशील रूप से जेनरेट की गई HTML साइट की तरह।

  5. एक और तरीका जिसे आप कस्टम नियंत्रण बना सकते हैं वैसे ही जावाफैक्स टीम ऐसा करता है (नियंत्रण के लिए त्वचा और व्यवहार वर्ग बनाकर)। जावाएफएक्स 2.2 (और शायद भविष्य में जावाएफएक्स संस्करणों में भी), यह लाइब्रेरी रचनाकारों के लिए सबसे उपयुक्त है, जैसे कि jfxtras पर काम कर रहे हैं या जावाएफएक्स प्रोजेक्ट के open source control repository पर सीधे योगदान दे रहे हैं।

  6. भी ध्यान रखें कि, सीएसएस में, आप एक नियंत्रण के लिए एक त्वचा वर्ग निर्दिष्ट कर सकते हैं, उदाहरण के लिए RadioButton निम्नलिखित सीएसएस है:

 
    .radio-button { 
     -fx-skin: "com.sun.javafx.scene.control.skin.RadioButtonSkin"; 
    } 

तो, एक तरह से अनुकूलित करने के लिए RadioButton के रूप में देखने के लिए आप इस पर विचार कर रहे हैं:

  1. पहले से जुड़े ओपन सोर्स जावाएफएक्स रिपोजिटरी से RadioButtonSkin वर्ग स्रोत की एक प्रति प्राप्त करें।
  2. इसे एक नए वर्गनाम (उदा। LinedRadioButtonSkin) पर कॉपी करें।
  3. अपनी इच्छा को देखने के लिए इसे संशोधित करें।
  4. अपनी परियोजना के लिए एक कस्टम सीएसएस स्टाइलशीट बनाएं।
  5. कस्टम सीएसएस स्टाइलशीट में -fx-skin.radio-button वर्ग की विशेषता को अपने नए LinedRadioButtonSkin क्लास का उपयोग करने के लिए सेट करें।

जब तक आपके नए त्वचा सही ढंग से लागू करने और मौजूदा ButtonBehaviour वर्ग कैसे मौजूदा RadioButtonSkin वर्ग काम करता है, तो आप स्वचालित रूप से समान व्यवहार मौजूदा रेडियो के रूप में अपनी नई त्वचा आधारित रेडियो बटन के लिए मिलना चाहिए के समान करने के लिए तार है बटन। उदाहरण के लिए, बटन माउस क्लिक, कीबोर्ड एक्सेलेरेटर, टच इवेंट्स, टॉगल ग्रुप इत्यादि के साथ इंटरैक्ट करेगा, बिल्कुल मौजूदा रेडियोबटनस्किन जैसा ही होगा और मौजूदा RadioButton एपीआई का उपयोग करके सुलभ हो जाएगा। यही है, बटन रेडियोबटन के अनुभव (व्यवहार) को बरकरार रखता है लेकिन विभिन्न आंतरिक घटकों, लेआउट और सीएसएस स्टाइल का उपयोग करके पूरी तरह अलग हो सकता है।

यदि आप कस्टम त्वचा मार्ग जाने का निर्णय लेते हैं और इस प्रक्रिया में सहायता चाहते हैं, तो jfxtras टीम के सदस्यों से संपर्क करने और jfxtras प्रोजेक्ट में अपनी नई त्वचा दान करने पर विचार करें।

चेतावनी

त्वचा और JavaFX 2.2 में व्यवहार कक्षाएं निजी कार्यान्वयन API, नहीं सार्वजनिक रूप से समर्थित API हैं और के रूप में वे सार्वजनिक एपीआई (JavaFX का अगला प्रमुख रिलीज के लिए निर्धारित के लिए संक्रमण भविष्य में बदल जाएगा - जावाएफएक्स/जेडीके 8) - इसलिए यदि आप आज इनका उपयोग करते हैं, तो सावधानी के साथ ऐसा करें। एक बार जब वे सार्वजनिक एपीआई में संक्रमण हो जाते हैं, तो मुझे उम्मीद है कि आप इन कक्षाओं का उपयोग करके अपने नियंत्रण बनाने के तरीके के बारे में अधिक जानकारी और ट्यूटोरियल देखेंगे।

पैकेज नाम और एपीआई विधियां एपीआई के रूप में बदलती हैं ताकि आंतरिक निजी कार्यान्वयन से सार्वजनिक एपीआई में त्वचा और व्यवहार संक्रमण से अपने नियंत्रण बनाए जा सकें। उदाहरण के लिए com.sun.javafx.scene.control.behavior.BehaviorBasejavafx.scene.control.behavior.Behavior बन सकता है, इसलिए यदि आप बिहाररबेस को विस्तारित करने वाली कक्षा बनाते हैं, तो यह जावाएफएक्स के एक नए संस्करण के खिलाफ नहीं चलाएगा जब तक कि आप नए नाम और एपीआई को संदर्भित करने के लिए कक्षा के स्रोत को संशोधित नहीं करते हैं और इसे पुन: संकलित करते हैं।

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

+0

आपको बहुत धन्यवाद, गहने! मैं जो सारी जानकारी चाहता था और मैं दो किताबों में चूक गया। (6) मेरे द्वारा उपयोग किए जाने वाले "डब्ल्यूपीएफ टेम्पलेट" जैसा लगता है। मैं कोशिश करूंगा (5) और (6) ... पहले ही उत्साहित है। पीएस .: क्या आप एक अच्छी किताब सुझा सकते हैं? पीपीएस: मुझे समझ में नहीं आता कि सावधानी के साथ निजी कार्यान्वयन एपीआई का उपयोग क्यों करें? – thinkU

+0

अपने प्रश्नों के उत्तर देने के लिए अद्यतन चेतावनी जानकारी। – jewelsea