जावा स्विंग विकास की सर्वोत्तम प्रथाएँ क्या हैं?


17

इस प्रश्न के लिए अपना पूर्व-शोध करते समय , मैंने पाया कि इंटरनेट पर जावा स्विंग की सर्वोत्तम प्रथाओं के बारे में बहुत अच्छी तरह से व्यवस्थित जानकारी नहीं है। इसलिए मुझे लगता है कि मैं एक महान सूची के निर्माण पर स्टैक एक्सचेंज एक शॉट दूँगा।

जावा स्विंग विकास की सर्वोत्तम प्रथाएँ क्या हैं? आपने आपके लिए क्या काम किया है, और क्यों?


2
मैंने स्कूल में स्विंग के साथ खेला, और यह एक सुखद अनुभव नहीं था। पूरी चीज फूला हुआ और अनावश्यक रूप से जटिल लग रहा था। सबसे अच्छा अभ्यास कुछ और
रॉबर्ट हार्वे

1
@RobertHarvey "स्कूल में खेलना" उत्पादन सॉफ्टवेयर देने से बहुत दूर है। मैंने पाया है कि स्विंग एक उचित, तार्किक तरीके से वह सब कर सकता है जिसकी उसे आवश्यकता थी।

ठीक है, इसे इस तरह से रखें: यदि यह एक मात्र स्कूल परियोजना पर मुश्किल था, तो यह लगभग एक वास्तविक पर मुश्किल से मुश्किल होगा।
रॉबर्ट हार्वे

1
@RobertHarvey पावर एक कीमत के साथ आती है ...

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

जवाबों:


12

मैं केवल इस बात का जवाब दे सकता हूं कि मेरे लिए क्या काम किया है। अन्य टिप्पणीकारों ने बताया है कि जावा जीयूआई सामान्य रूप से गैर-देशी दिखने और महसूस करने की 'अस्वच्छ घाटी' में आते हैं, और मैं इस पर विवाद नहीं करता।

एक्शन एपीआई का अच्छा उपयोग करें। यह आपको आपके उपयोगकर्ता द्वारा किए जाने वाले विभिन्न कार्यों को बेहतर ढंग से करने की अनुमति देता है और आपको शॉर्टकट, एक्सेलेरेटर कीज, बटन और अन्य इनपुट ऑब्जेक्ट तक आसानी से वायर करने की अनुमति देता है।

एक उपयुक्त लेआउट प्रबंधक का उपयोग करें। GridBagLayout बेहद शक्तिशाली है, लेकिन मैं यह कहना चाहूंगा कि यह अत्यधिक मात्रा में टिप्पणियों के बिना अस्वीकार्य है। जब मैं सोनार जैसे स्थैतिक कोड विश्लेषण उपकरण चलाता हूं, तो एक पुराने GUI ऐप पर जो मैं बनाए रखता हूं, यह ग्रिडबग्स लेआउट को सही बनाने के लिए हमेशा बड़ी संख्या में जादू की संख्या को इंगित करता है। मुझे GroupLayout के साथ बहुत सफलता मिली है, जो पिक्सेल-पूर्ण संरेखण निर्दिष्ट करने से बचता है।

अगर आपको लगता है कि आपको JDialog की जरूरत है ... तो आप शायद नहीं। उपयोगकर्ता अनुभव के संदर्भ में डायलॉग बॉक्स भयानक हैं - इस एप्लिकेशन ने उन्हें हर मेनू और फॉर्म के लिए उपयोग करने का निर्णय लिया, और विचित्र तरीकों से हमेशा ऑन-टॉप नियमों को लागू करने के लिए। यह एक रखरखाव दुःस्वप्न में बदल गया जब हमें वास्तव में मेनू पर कुछ सतर्क करने की आवश्यकता थी। असुविधाजनक पर क्लिक करने से निराश क्यू - और इस तरह से अविश्वसनीय - संवाद।

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

यह सब मैं सुझाव दे सकता हूं, मेरे सीमित सीमित अनुभव में।


2
JDialogपूरी तरह से ठीक है - जब तक आप इसे संवाद के लिए उपयोग करते हैं।
जोनास

1
मैं मानता हूं कि यदि आप उन्हें जानकारी के लिए उपयोग कर रहे हैं तो वे ठीक हैं - बिल्कुल देखा जाना चाहिए और तुरंत काम किया जाना चाहिए। लेकिन अधिकांश जानकारी वास्तव में उपयोगकर्ता अनुभव को बाधित करने की आवश्यकता नहीं है। मेरे क्वालिफायर के पीछे यही बात थी।
टॉम जी

@ जोनास मुझे लगता है कि बात यह है कि संवाद एक बुरी चीज है (भले ही वे इसके साथ लागू हों JDialogया न हों)।
टॉम हॉल्टिन -

1
बदबूदार पक्ष पर युग्मन थोड़ा सा है, लेकिन अपने स्वयं के थ्रेडिंग कोड लिखने से बेहतर आईएमओ है। मैं बल्कि सूक्ष्म धागा कीड़े की तुलना में एक अशुभ कोड के साथ सौदा होगा।
टॉम जी

3
आप MigLayout - miglayout.com

4

मैं कहूंगा कि पहली चीजों में से एक सीधे उस पर काम नहीं करना है। स्विंग (IMHO) में लेआउट सिस्टम बहुत ही भयानक है, और इसमें से किसी भी पर्याप्त ऐप को बनाने की कोशिश एक बुरा सपना है।

मेरे द्वारा उपयोग किए गए कई वैकल्पिक लेआउट प्रबंधकों में से दो MigLayout और MultiSplitPane लेआउट हैं। MigLayout अधिक सामान्य उद्देश्य है और किसी भी लेआउट को आप एक आसान, समझदार तरीके से सोच सकते हैं। MultiSplitPane अधिक विशिष्ट है; मैंने इसे GUI के लिए कुछ सरल लेआउट बनाने के लिए उपयोग किया है जिसमें बहुत जटिलता नहीं है।

EDIT : यह स्विंग को प्रतिस्थापित नहीं करता है । यदि आपको स्विंग का उपयोग करना है, तो आप अभी भी इन लेआउट प्रबंधकों का उपयोग कर सकते हैं क्योंकि वे केवल स्विंग का प्रबंधन करते हैं, इसे प्रतिस्थापित नहीं करते हैं।


बेशक बेहतर विकल्प सिर्फ स्विंग का उपयोग नहीं करना है। स्विंग के साथ काम करने के लिए भयानक होने के लिए बहुत आलोचना की जाती है , देशी और धीमी नहीं दिखती है । कई विकल्प मौजूद हैं जिन्होंने स्विंग से सीखा है कि क्यूटी, एसडब्ल्यूटी की तरह क्या नहीं करना है, और मुझे लगता है कि जीटीके भी। ये स्विंग के सिरदर्द के लिए महान दीर्घकालिक समाधान हैं

संपादित करें : जैसा कि @ लॉर्ड तोर्गामस ने कहा, ये वास्तव में उपलब्ध नहीं हैं यदि आपके द्वारा स्विंग का उपयोग करने के लिए मजबूर किया गया है। यदि आप अपनी परियोजना बनाते समय इसे निपटाने के लिए इनका सबसे अच्छा उपयोग करने जा रहे हैं, तो 3/4 के माध्यम से या लेगिंग ऐप्स उठाते समय नहीं।

मैं यह भी नोट करना चाहूंगा कि ऑपरेटिंग सिस्टम की तरह दिखने के लिए ज्यादातर वैकल्पिक जीयूआई का उपयोग देशी पुस्तकालयों, फिर स्विंग या कुछ अन्य प्योर जावा जीयूआई पर करें।


4
मैं आपकी राय की सराहना करता हूं, लेकिन "स्विंग का उपयोग न करें" उन लोगों के लिए मददगार नहीं है जो इस सवाल का अंत करते हैं क्योंकि वे एक कारण या किसी अन्य के लिए स्विंग का उपयोग करने के लिए मजबूर हो रहे हैं।
पोप

@ इसीलिए मैंने क्यूटी और एसडब्ल्यूटी का सुझाव देने से पहले वैकल्पिक लेआउट प्रबंधकों का सुझाव दिया। जो भी आप कर सकते हैं का उपयोग करें।
एलक्यू

"स्विंग (आईएमएचओ) में लेआउट प्रणाली भयानक है, और इसमें से किसी भी पर्याप्त ऐप को बनाने की कोशिश एक बुरा सपना है।" लेआउट प्रबंधक AWT से आते हैं, स्विंग नहीं। दी गई, कुछ स्विंग विशिष्ट हैं, जैसे कि BoxLayout और GroupLayout। यह कहने के बाद कि, लेआउट प्रबंधक पूरी तरह से वैकल्पिक हैं ... आप इसके बजाय प्रत्येक घटक के लिए निर्देशांक निर्दिष्ट कर सकते हैं जैसे आप .NET WinForms में करते हैं (इसके अलावा .NET में आपके लिए यह करने के लिए एक अच्छा GUI है)।
पॉवरलॉर्ड

3
MigLayout - miglayout.com

1
@ TheLQ Ok मैं स्विंग के फाइल मैनेजर के बारे में सहमत हूं, कि वास्तव में एक बेवकूफ है (मैक ओएस एक्स पर भी)। वैसे भी, मैं अभी तय करने के लिए AWT के फ़ाइल प्रबंधक का उपयोग करता हूं। अच्छा काम करता है, भले ही बाकी एप्लिकेशन स्विंग का उपयोग करके बनाया गया हो।
स्टॉम्स्टैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.