2012-10-03 16 views
15

JavaFX 2 रंग पिकर एक बटन है कि इतनी तरह एक रंग चयनकर्ता फलक पॉप अप होता है:JavaFX 2 कस्टम पॉपअप फलक

JavaFX 2 colour picker

मैं, कुछ इसी तरह करना चाहते हैं कि मैं चाहता हूँ बटन पर क्लिक होने पर पॉप अप करने के लिए एक कस्टम फलक और कुछ और क्लिक होने पर गायब हो जाता है (मेरे मामले में, कुछ छवि थंबनेल)। इसे प्राप्त करने का सबसे अच्छा तरीका क्या होगा? क्या मुझे ContextMenu का उपयोग करना चाहिए और किसी भी तरह मेनू मेनू में एक फलक जोड़ना चाहिए, या क्या मुझे कुछ और देखना चाहिए?

उत्तर

23

वर्तमान जावाएफएक्स 2.2 एपीआई के साथ अच्छा करना मुश्किल है।

यहां कुछ विकल्प दिए गए हैं। यह MenuItem

है में यह दृष्टिकोण Button with popup showed below के निष्पादन sample code में ले लिया है


एक ग्राफिक सेट के साथ एक MenuButton का प्रयोग करें।

wizpopup


एक PopupControl

का उपयोग कैसे ColorPicker इस में यह code है करता है पर एक नजर डालें।

कलरपीकर PopupControl बढ़ाता है। आप यह कर सकते हैं, लेकिन वर्तमान में अपने स्वयं के पॉपअप कंट्रोल बनाने के लिए आवश्यक सभी एपीआई सार्वजनिक नहीं हैं। इसलिए, जावाएफएक्स 2.2 के लिए, आपको आंतरिक com.sun कक्षाओं पर भरोसा करना होगा जो बहिष्कृत हैं और उन्हें जेडीके 8 में सार्वजनिक javafx.scene.control कक्षाओं द्वारा प्रतिस्थापित किया जाएगा।


उपयोग एक ContextMenu

तो, मुझे लगता है कि आपके विचार "एक ContextMenu का उपयोग करें और एक MenuItem करने के लिए एक फलक जोड़ें" करने के लिए शायद अब के लिए सबसे अच्छा तरीका है। आपको सामान्य MenuItem पर CustomMenuItem या setting a graphic का उपयोग कर ऐसा करने में सक्षम होना चाहिए। ContextMenu में relative positioning logic अच्छा है। एक ContextMenu को MenuButton द्वारा ट्रिगर भी किया जा सकता है।


उपयोग एक कस्टम संवाद

ऐसा करने के लिए, नोड के लिए एक स्थान रिश्तेदार पर एक पारदर्शी मंच प्रदर्शित करते हैं।

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


उपयोग एक ग्लास फलक

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

आप देख सकते हैं कि this demo में एंकर नोड्स का उपयोग यह देखने के लिए किया जाता है कि यह आपके संदर्भ के अनुकूल कैसे हो सकता है।


वहाँ JavaFX8 के लिए इस के लिए एक प्रासंगिक अद्यतन है?

जावा 8 के लिए प्रासंगिकता में बहुत अंतर नहीं है, सामान्य रूप से विकल्प जावा 2.2 कार्यक्षमता के आधार पर इस पोस्ट में उल्लिखित हैं। जावा 8 Dialog और Alert कार्यक्षमता जोड़ता है, लेकिन वे प्रश्न में वांछित कार्यक्षमता की तरह सीमाओं, शीर्षकों और बटनों के साथ संवाद के उपयोग पर अधिक लक्षित हैं। शायद आप डायलॉग क्लास से शुरू करने में सक्षम हो सकते हैं और इसकी आवश्यकता के करीब कुछ पाने के लिए इसे कस्टमाइज़ कर सकते हैं, लेकिन आप शायद रिक्त चरण या पॉपअप कंट्रोल से शुरू होने से बेहतर हो सकते हैं।

+0

बहुत बढ़िया, अच्छा अवलोकन, इसके लिए धन्यवाद! ऐसा लगता है कि जावाफैक्स 8 तक मुझे बहुत सी चीजें याद आ रही हैं ... ऐसा जीवन है। – berry120

+0

क्या आप 'कॉन्टेक्स्टमेनू का उपयोग करें' के लिए एक उदाहरण दे सकते हैं? – TomJ

+0

मैन्युअल स्थिति के साथ एक कस्टम घटक के लिए setManged (false) के साथ एक उदाहरण देखना चाहता हूं। – T3rm1