2012-03-09 24 views
6

क्या एक ग्रेडिंग पृष्ठभूमि के साथ पेंट करने के लिए स्विंग घटक (उदाहरण के लिए एक जेपीनल) के सभी उदाहरणों की डिफ़ॉल्ट पृष्ठभूमि पेंटिंग को बदलने का कोई तरीका है? या क्या मुझे जेपीनल का विस्तार करना होगा जो ढाल के साथ पेंट करता है और उसके बाद मेरे ऐप में जेपीनेल की बजाय इसका उपयोग करता है?स्विंग घटक डिफ़ॉल्ट ढाल पृष्ठभूमि

+0

क्या आपको केवल पृष्ठभूमि जेननेल के लिए ऐसा करने की आवश्यकता नहीं है, और फिर अन्य सभी जेपीनेल गैर-अपारदर्शी बनाते हैं? –

+0

@ होवरक्राफ्टफुलऑफेल, यह एक और विकल्प भी है। अगर मैं इसे अन्य घटकों तक विस्तारित करना चाहता हूं, तो मुझे लगता है कि मुझे अभी भी उन घटकों को विस्तारित करने की आवश्यकता होगी। –

+0

@ जेफस्टोरी: शायद, लेकिन जरूरी नहीं। आप अपने जेपीनेल को कुछ साधारण फैक्ट्री विधि के माध्यम से बना सकते हैं जो अपारदर्शी को झूठी सेट करता है, या आप सभी गैर-बेस जेपीनेल को गैर-अपारदर्शी होने के लिए जीयूआई सेटिंग के माध्यम से पुन: साझा कर सकते हैं। –

उत्तर

3

आईएमएचओ, स्विंग घटक को केवल उपclass करना और ग्रेडियेंट पेंटिंग करने के लिए paintComponent विधि को ओवरराइड करना आसान होगा। और फिर, जैसा कि आपने कहा था, पूरे एप्लिकेशन में इस कस्टम घटक का उपयोग करें।

यूआई गुणों का उपयोग करके यह मुश्किल हो सकता है क्योंकि वे सभी एलएएफ में संगत नहीं हो सकते हैं।

+0

जो मेरा प्रारंभिक विचार था। यह सुनिश्चित नहीं था कि ऐसा करने का कोई आसान तरीका है या नहीं। विशेष रूप से यदि मैं ढाल को कई घटक प्रकारों पर लागू करना चाहता था, तो मुझे सभी घटकों को उप-वर्ग करना होगा। –

+0

@ जेफस्टोरी, उस स्थिति में, शायद 'JComponent' को उपclass करना बेहतर होगा। – Moonbeam

+0

मुझे यकीन नहीं है कि यह कई घटक प्रकारों के लिए कैसे मदद करेगा। मान लीजिए कि मैं एक बटन की पृष्ठभूमि बदल रहा था, जेकंपोनेंट उप-वर्गीकरण कैसे मदद करेगा? –

0

यह पूरी तरह से स्पष्ट नहीं है कि आप किस उद्देश्य का इरादा रखते हैं। क्या आपका मतलब वर्ग (इसलिए सभी जेपीनल उदाहरण नई पेंटिंग योजना का पालन करते हैं), या क्या आप कंटेनर में सभी घटक (उदाहरण के लिए फ़्रेम में सब कुछ) का मतलब है?

घटक वर्ग के आधार पर ऐसा करने की संभावनाएं हैं, जिन स्थानों पर आप हुक कर सकते हैं वे देखो और महसूस करते हैं, और घटक घटक आधार पर, या तो पेंटकंपोनेंट() विधि, या यदि आपको प्रतिस्थापित करने की आवश्यकता है मौजूदा घटक का मानक रूप जहां आप विधि को ओवरराइट नहीं कर सकते हैं क्योंकि घटक बनने के बाद अपनी यूआई क्लास (Component.setUI देखें) प्रदान करके आप पर इसका कोई नियंत्रण नहीं है।

ओवरराइट पेंट कॉम्पोनेंट दृष्टिकोण के अलावा न तो लागू करने के लिए आसान है। अधिकांश अनुप्रयोगों के लिए सरल दृष्टिकोण सबसे अच्छा है :)

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