यह जावा प्रोग्रामिंग है कि अत्यधिक के तहत दस्तावेज का एक क्षेत्र है। जैसा कि आप उल्लेख करते हैं, एक जीयूआई विकसित करने के लिए जेएफआरएएम या जेडियलॉग से विस्तार करना एक अच्छा डिजाइन अभ्यास नहीं है, फिर भी आप नमूना कोड में इसे जगह पर देखते हैं।
जेएसआर 2 9 6 एक उपयोगी प्रारंभिक स्थान है, लेकिन इसकी वास्तुकला में कुछ गंभीर समस्याएं हैं। मैं जेएसआर 2 9 6 का उपयोग करता हूं, लेकिन मेरे पास इसका अपना स्वाद है, और लगातार ढांचे के डिजाइन द्वारा पेश किए गए मुद्दों के आसपास काम करना है।
मैंने लंबे समय से सोचा है कि इस विषय पर एक चर्चा समूह/विकी/कुछ केंद्रित होना चाहिए। अब तक, मैंने उपयोगी समृद्ध क्लाइंट पुस्तकालयों के लिए सूचियों को उपयोगी पाया है, लेकिन व्यापक नहीं है। शायद शुरू करने के बारे में कुछ सोचने के लिए, मेरे खाली समय में :-)
इसलिए मैं स्विंग अनुप्रयोगों के निर्माण में सर्वोत्तम प्रथाओं के लिए कोई निश्चित संसाधन प्रदान नहीं कर सकता। लेकिन मैं आपको टूलकिट्स और अवधारणाओं के बारे में कुछ पॉइंटर्स दे सकता हूं जिन्हें मैंने पाया है कि मैं बार-बार उपयोग करता हूं। हो सकता है कि ये आपके लिए उपयोगी हों जैसे आप जा रहे हैं। इसके अलावा, यदि पर्याप्त लोग सर्वोत्तम प्रथाओं, साझाकरण कोड आदि के बारे में चर्चा करने में रुचि रखते हैं ... मुझे इसका हिस्सा बनने में दिलचस्पी होगी।
सबसे पहले, कुछ बिल्कुल महत्वपूर्ण पुस्तकालयों यदि आप स्विंग विकास करने जा रहे हैं:
बाइंडिंग - वहाँ है कि ऐसा करते हैं (JGoodies पुस्तकालयों के एक नंबर, JSR295 जो एक खुला स्रोत परियोजना में निकाला गया है बेहतर बीन्स बाइंडिंग (बीबीबी) कहा जाता है, ग्रहण बाध्यकारी ढांचे)। मैंने जेजीडीज का उपयोग करके कई साल पहले शुरुआत की थी, लेकिन मैं बीबीबी का उपयोग करने के लिए आगे बढ़ गया हूं क्योंकि मुझे लगता है कि यह अधिक सहज होने का दृष्टिकोण है। मैं घोषणात्मक कोडिंग दृष्टिकोण के फायदों पर दबाव नहीं डाल सकता जो बाध्यकारी के लिए अनुमति देता है - यह वास्तव में आपके कोड
ऐपफ्रेमवर्क (या इसके कुछ स्वाद) - जेएसआर 2 9 6 यहां शुरू करने का स्थान है। जैसा कि मैंने ऊपर बताया है, इसमें कुछ समस्याएं हैं - यदि आप जेएसआर 2 9 6 का उपयोग करते हैं, तो मैं दृढ़ता से अनुशंसा करता हूं कि आप ढांचे के मूल में मौजूद सिंगलटन का उपयोग करने से बचने की कोशिश करें (फ्रेमवर्क घटकों के इंजेक्शन के स्रोत के अलावा आपको वास्तव में जरूरत है)।
संपादित - यह JSR 296 के रूप में जीवन शुरू किया था, लेकिन इसके साथ अब आम में बहुत कम है - के बाद से मैं यह लिखा है, मैं हमारी परियोजनाओं (यह एक Guice आधारित एप्लिकेशन रूपरेखा है में GUTS का उपयोग शुरू किया)। जीयूटीएस अभी भी एक युवा परियोजना है, लेकिन यह देखने के लायक है कि क्या आप ढांचे पर विचार कर रहे हैं।
चमकदारसूची - यदि आप यूआई में कुछ भी कर रहे हैं जिसमें सूचियां, टेबल या पेड़ शामिल हैं, तो आपको GlazedLists पर एक कठिन नज़र रखना चाहिए। यह एक अविश्वसनीय प्रोजेक्ट है (न केवल स्विंग ऐप्स के लिए, लेकिन यह वास्तव में उस क्षेत्र में चमकता है)
प्रमाणीकरण - JGoodies की एक बहुत अच्छी सत्यापन लाइब्रेरी है। इसे जानें, इसका इस्तेमाल करें, इसके साथ एक बनें। वास्तविक समय सत्यापन एक आधुनिक स्विंग ऐप का एक अविश्वसनीय रूप से महत्वपूर्ण हिस्सा है।
मिगलाउट - मिग लेआउट मैनेजर सबसे अच्छा है। मैं दृढ़ता से एक आईडीई जीयूआई बिल्डर का उपयोग करने के प्रलोभन के खिलाफ सलाह देता हूं - मिगलाउट (इसमें कुछ घंटे लगेंगे, शीर्ष), और कोड चीजें हाथ से सीखें।
तो वे मेरी पुस्तक में कुंजी, बिल्कुल जरूरी पुस्तकालय हैं।
अब कुछ अवधारणाओं:
ए प्रस्तुति मॉडल - मार्टिन Fowler इस डिजाइन पैटर्न पर जानकारी का एक बहुत कुछ है। लंबा और छोटा, यह व्यवहार को जीयूआई स्तर पर प्रस्तुतिकरण से अलग करता है। यदि आप एमवीसी के लिए उपयोग किया जाता है, प्रेजेंटेशन मॉडल अलग होने की एक और परत जोड़ता है जो 'लाइव' यूआई के लिए काफी महत्वपूर्ण है। मेरे सभी विचारों को संबंधित प्रेजेंटेशन मॉडल द्वारा समर्थित किया जाता है। अंत परिणाम यह है कि व्यू कोड वास्तव में सरल है - दो चीजों पर ध्यान केंद्रित करना: 1. लेआउट, और 2. प्रस्तुतिकरण मॉडल में बाध्यकारी दृश्य घटक। बस।
बी व्यू जेपीनेल के उप-वर्ग नहीं हैं। इसके बजाए, मैं व्यूअर को एक निर्माता के रूप में पेश करने की जेजीडीज प्रेरित तकनीक का पालन करता हूं जो जेपीनेल बनाता है। बुनियादी पैटर्न है:
public class MyView{
private MyPresentationModel model;
private JButton okButton;
private JButton cancelButton;
...
public MyView(MyPresentationModel model){
this.model = model;
}
public JPanel buildView(){
initComponents(); // this method actually creates the okButton and cancelButton objects
bindComponentsToModel(); // this method binds those objects to the PresentationModel
JPanel p = new JPanel(new MigLayout());
p.add(...);
...
return p;
}
}
यह दृष्टिकोण, धार्मिक पीछा किया, UI का अविश्वसनीय रूप से तेजी से विकास कि बनाए रखने के लिए आसान कर रहे हैं अनुमति देता है। ध्यान दें कि हम एक से अधिक जेपीनल बनाने के लिए दिए गए व्यू का उपयोग कर सकते हैं जो सभी एक ही प्रस्तुति मॉडल द्वारा समर्थित हैं - दृश्य द्वारा उत्पन्न एक पैनल में परिवर्तन तुरंत उसी दृश्य से उत्पन्न अन्य पैनल में दिखाई देंगे।
सी। घटनाओं का उपयोग ईवेंट ईवेंट हैंडलर नहीं। जेएसआर 2 9 6 वास्तव में क्रियाओं को बनाने और काम करने में आसान बनाने का अच्छा काम करता है।
डी। ईडीटी से लंबे समय तक चलने वाले संचालन (यहां तक कि कुछ भी जो 100 एमएमएस लेता है) करें। जेएसआर 2 9 6 इसे टास्क सपोर्ट के साथ काफी आसान बनाता है - लेकिन जब अपवाद हैंडलिंग की बात आती है तो 2 9 6 के टास्क सिस्टम में कई गॉथस हैं। यदि आपके पास संपत्ति में परिवर्तन होते हैं जो बदले में लंबे समय तक चलने वाली घटनाओं में पड़ते हैं, तो सुनिश्चित करें कि आप सावधानी से सोचें कि किस बदलाव में ये परिवर्तन होने जा रहे हैं। कार्य का उपयोग करना आपके विकास के तरीके में एक बड़ा बदलाव है, लेकिन यह वास्तविक स्विंग एप्लिकेशन के लिए वास्तव में एक महत्वपूर्ण क्षेत्र है - इसके बारे में जानने के लिए समय लें।
ई। संसाधन इंजेक्शन महत्वपूर्ण है। शुरुआत से इसका उपयोग करें (स्वयं को यह बताने के बजाय कि आप इसे बाद में जोड़ देंगे) - यदि आप खुद को जेएलएबल पर सेटटेक्स्ट() को कॉल करते हैं, तो वापस बैठने और setName() को कॉल करने का समय है, और संसाधनों में एक प्रविष्टि जोड़ें फ़ाइल। यदि आप इसके बारे में अनुशासित हैं तो जेएसआर 2 9 6 यह बहुत आसान बनाता है।
मुझे लगता है कि यह अभी के लिए पर्याप्त है - यह बहुत ही जटिल विषय है। मैंने पिछले 7 या 8 वर्षों में अपने सिर को उन चीजों में टक्कर लगी है जो काम नहीं करते हैं - और मैं लगातार उन चीजों को करने के बेहतर तरीके ढूंढ रहा हूं जो मेरे लिए अच्छी तरह से काम करते हैं।
एक और चीज जिसे मैं यहां उल्लेख करना चाहता हूं: मैंने एक्लिप्स, नेटबीन और स्प्रिंग समृद्ध क्लाइंट प्लेटफ़ॉर्म पर बड़े पैमाने पर देखा है। मेरा लेना यह है कि वे कुछ प्रकार की परियोजनाओं के लिए उपयोगी हो सकते हैं, लेकिन सीखने की अवस्था खड़ी है, और यदि आप उन प्लेटफार्मों में से किसी एक का उपयोग करना चुनते हैं तो आपको वास्तव में अपने नियमों से खेलना होगा। –
जेपीनल (या किसी भी जेकंपोनेंट) को विस्तारित करने में क्या गड़बड़ है? यदि मेरे पास है, उदाहरण के लिए, एक पैनल जिसका उद्देश्य एक नक्शा दिखाना है, मैं MapPanel नामक एक कक्षा बनाउंगा, जेपीनल का विस्तार करूंगा, और पैनल पर एक नक्शा खींचूंगा। –
उस उपयोग के साथ कोई समस्या नहीं, थॉमस - मेरे पास जो मुद्दा है वह परिदृश्य है जहां लोग उप-वर्ग जेपीनल हैं ताकि वे इसमें घटक जोड़ सकें (जेएफआरएएम या जेडियलोग से विस्तार करना एक बेहतर उदाहरण है - मैं पोस्ट को संपादित करूंगा संकेत मिलता है कि)। आपके मामले में, यदि आपने मानचित्र को JScrollPane के अंदर रखा है, तो पैनल में JScrollPane जोड़ा गया है, तो मैं कहूंगा कि एक अलग दृष्टिकोण की आवश्यकता थी। लेकिन वास्तव में एक नया यूआई घटक बनाने के लिए, जेपीनल का विस्तार करने का रास्ता है। –