2010-01-19 12 views
5

कुछ परिस्थितियों में, मुझे एक जेनबैडपेन की आवश्यकता होती है जब तक कि उपयोगकर्ता कुछ जानकारी प्रदान न करे। अनिवार्य रूप से, जब यह परिस्थिति होती है, तो मुझे वर्तमान फलक को मोडल बनने की आवश्यकता होती है।मैं JTabbedPane के एक फलक पर कैसे जमा कर सकता हूं?

मैं इसे कैसे कार्यान्वित कर सकता हूं? मैं सोच रहा था कि फलक बदलते समय मैं जो भी घटना ट्रिगर कर सकता हूं उसे पकड़ सकता हूं, और उस फलक पर वापस रीसेट कर सकता हूं जिसे मैं चिपकाना चाहता हूं। लेकिन मुझे चिंता है कि यह बिल्कुल सही नहीं होगा, इस बात पर निर्भर करता है कि जब घटना वास्तव में नए फलक में संक्रमण को आग लगती है तो के बाद होता है, मैं उस फलक को फलक को सेट करने के लिए विधि को कॉल करता हूं, या कुछ अन्य समान दौड़ की स्थिति। क्या कोई बेहतर तरीका है? क्या कोई तरीका है कि मैं इस दृष्टिकोण को काम कर सकता हूं?

+0

आप जेडीअलॉग या जॉप्शनपेन का उपयोग नहीं कर सकते? – ChadNC

+0

@ चाडएनसी, मैंने इसके बारे में सोचा, और असल में मैं उस विकल्प को पसंद करूंगा, लेकिन इस मामले में, उपयोगकर्ता को इस स्थिति को बदलने के लिए परिस्थितियों को बदलने के लिए कदम उठाने की जरूरत है, जिसके लिए मुझे फ्रीज करने की आवश्यकता है। और उस फलक पर नियंत्रणों का उपयोग करके, वे उस स्थिति को कम करने के कई तरीके हैं। यदि मैं एक मोडल संवाद पॉप अप करता हूं, तो वे उन सभी नियंत्रणों तक पहुंच खो देते हैं। – skiphoppy

उत्तर

6

मैं अन्य टैब अक्षम करने का सुझाव दूंगा। इसका उपयोगकर्ता प्रतिक्रिया प्रदान करने का सकारात्मक प्रभाव है कि वे टैब से बाहर नहीं जा सकते हैं। अन्यथा वे पागल होकर सोच रहे होंगे कि यह उन्हें टैब छोड़ने क्यों नहीं देगा।

आवश्यक फ़ील्ड पूरा होने के बाद बस उन्हें फिर से सक्षम करें।

+1

उपयोगकर्ता को यह भी स्पष्ट करें कि उन्हें क्या ठीक करने की आवश्यकता है। मैं कई चीजों को और अधिक निराशाजनक नहीं सोच सकता कि कुछ इनपुट के लिए इंतजार कर रहे किसी भी मॉडल पर फंस गया है, मुझे नहीं पता कि कैसे प्रवेश करना है। – TwentyMiles

+0

@TwentyMiles Yup, मैं आमतौर पर लाल या पीले रंग के क्षेत्र को हाइलाइट करता हूं .. इसे खड़ा कर दें। –

+0

यह मेरा स्वीकार्य उत्तर है, लेकिन मैंने अन्य सभी के टुकड़ों का उपयोग किया; विशेष रूप से, यह चाडएनसी था जिसने मुझे JavaEocs पढ़ने में काफी कुशल होने के बावजूद setEnabledAt() विधि (जो मुझे अपने आप को नहीं मिल सका), और कार्लोस के समाधान ने लगभग मेरे लिए काम किया और एक अच्छा स्टॉपगैप बनाया बुनियादी अवधारणा को काम करने का समाधान। – skiphoppy

2

सिर्फ JTabbedPane निष्क्रिय कर दें:

pane.setEnabled(false); 

और इसे सक्षम करता है, तो सभी क्षेत्रों सही ढंग से स्थापित कर रहे हैं (या जो भी हालत)

+0

बहुत अच्छा! थोड़ा बंद क्योंकि यह वर्तमान टैब को बाहर निकालता है, लेकिन वर्तमान फलक सक्रिय रहता है, इसलिए यह काम करता है। मुझे लगता है कि मैं प्रत्येक व्यक्तिगत टैब को अक्षम करने की कोशिश करने के लिए जाऊंगा, हालांकि, अगर मैं इसे सही ढंग से काम कर सकता हूं। – skiphoppy

+1

@skiphoppy - यदि आप वर्तमान टैब को ग्रे नहीं करना चाहते हैं, तो आप @Chris समाधानों से जा सकते हैं: 'JTabbedPane का उपयोग करें।प्रत्येक टैब को अक्षम करने के लिए setEnablebAt (int, boolean) 'चालू करें। –

2

आप JPanels के साथ एक CardLayout और इस्तेमाल कर सकते हैं कि आप क्या चाहते करने के लिए उपयोग नहीं JTabbedPanes। चूंकि आपको टैब्ड किए गए पैन का उपयोग करने की आवश्यकता है, इसलिए मैं सुझाव दूंगा कि एक बार शर्त समाप्त हो जाने के बाद आप उस टैब पर रहने के लिए उपयोगकर्ता को मजबूर करना चाहते हैं कि टैब का उपयोग करके चयनित व्यक्ति बनें।

setTabComponentAt(int index, Component component) 

या

setSelectedIndex(int index) 

सेट एक ध्वज का संकेत है कि उपयोगकर्ता को पूरा करने जो कुछ भी यह है कि आप उनसे क्या और सभी अन्य टैब setEnabledAt(int index, boolean enabled) का उपयोग कर निष्क्रिय किया जा करना चाहते हैं जब तक आगे बढ़ने के लिए सक्षम नहीं होना चाहिए। एक बार उपयोगकर्ता ने तदनुसार ध्वज सेट करने और अन्य टैब को पुन: सक्षम करने के लिए आवश्यकतानुसार पूरा कर लिया है।

मेरे पास उस समाधान को आजमाने का समय नहीं है, लेकिन मुझे लगता है कि इसे काम करना चाहिए।

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