2012-08-03 13 views
6

मेरे पास एक स्विंग जीयूआई क्लास है जो डिस्प्ले के एक हिस्से के लिए कस्टम जेपीनल को तुरंत चालू करती है। इस कस्टम क्लास में बटन और टेक्स्टफील्ड और इत्यादि हैं। मेरी जीयूआई क्लास जो कस्टम जेपीनल का मालिक है, में एक नियंत्रक वर्ग भी है जो मेरे डेटा मॉडल के संशोधन को संभालता है। घटनाओं को संभालने के लिए मैं कस्टम पैनल से अपने मालिक (मेरे गुई क्लास) में कार्रवाइयों को कैसे पास कर सकता हूं?इवेंट लिस्टेनर्स और कस्टम गुई घटक

मुझे लगता है कि शायद मैं कस्टम पैनल के अपने कन्स्ट्रक्टर में गुई में अपने नियंत्रक वर्ग के संदर्भ में जोड़ सकता हूं ताकि मैं इसे अपने बटन पर एक्शनलिस्टर के रूप में सेट कर सकूं। क्या यह दृष्टिकोण सलाह दी जाती है? क्या कोई बेहतर दृष्टिकोण है?

उत्तर

4

आपका View कोड (आपका कस्टम JPanel) में Controller फ़ील्ड (या अपने नियंत्रक वर्ग प्राप्त करने का कोई अन्य तरीका) होना चाहिए। इस तरह जब आप उपयोगकर्ता से कोई कार्रवाई प्राप्त करते हैं - उदा। माउस एक बटन पर क्लिक करता है - आप controller.doTheAppropriateAction() पर कॉल कर सकते हैं। या तो निर्माण में Controller पास करें, या उस पर एक जावबीन सेटर पैटर्न का उपयोग करें, और इसे अपने स्टार्ट-अप तर्क में निर्माण के बाद सेट करें (जो आपकी "जीयूआई कक्षा" जैसा लगता है)। मैं जावबीन पैटर्न पसंद करता हूं, क्योंकि जीयूआई संपादकों को कोई पैरामीटर कन्स्ट्रक्टर की आवश्यकता नहीं होती है।

आप अपने ViewListener एक के रूप में के लिए प्रासंगिक Controller (या Model) वर्ग रजिस्टर चाहिए, ताकि आप स्वचालित रूप से जब कुछ भी परिवर्तन बताया जाएगा - तो आप अपने Component रों repaint() (या कुछ और अधिक उन्नत है) कर सकते हैं। इसमें interface (लागू करने के लिए View के लिए) और Controller (या Model) में श्रोता हैंडलिंग तर्क स्थापित करने में शामिल होगा।

Lombok PG बाद वाले बॉयलरप्लेट को ले जाता है।

akf एक विकल्प देता है: Controller को अपने View कोड पर ActionListener के रूप में पंजीकृत करें। उस दृष्टिकोण का लाभ यह है कि आपका View कोड एक विशिष्ट Controller से बंधे नहीं होगा - लेकिन नुकसान यह है कि आपका Controller आपके View कोड से जुड़ा होगा। मैं विभिन्न यूआई कार्यान्वयन (उदाहरण के लिए स्विंग, जीडब्ल्यूटी, जेएसपी) के लिए Controller कोड का पुन: उपयोग करता हूं, इसलिए मेरा Controller एस और Model एस किसी विशेष View या परमाणु उपयोगकर्ता कार्रवाई पर कभी भी निर्भर नहीं हैं।

+0

+1 एक महान स्पष्टीकरण के लिए +1 – MadProgrammer

2

आप अपने मूल पैनल में ActionListener के रूप में अपने मूल जीयूआई के संदर्भ को पारित कर सकते हैं। आपका कस्टम पैनल तो अपने बटन के सभी के साथ अपने ActionListener -implementing माता पिता वर्ग, आदि रजिस्टर कर सकते हैं

आपके अभिभावक वर्ग तो प्रत्येक कार्य पर सूचित कर दिया जाएगा।

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