स्विंग और AWT में क्या अंतर है?


222

क्या कोई मुझे समझा सकता है कि स्विंग और AWT में क्या अंतर है?

क्या ऐसे कोई मामले हैं जहां AWT स्विंग या इसके विपरीत उपयोग करने की अधिक उपयोगी / सलाह दी जाती है?


जवाबों:


235

AWT आपके OS में मौजूद देशी सिस्टम GUI कोड के लिए एक जावा इंटरफेस है। यह हर सिस्टम पर समान काम नहीं करेगा, हालांकि यह कोशिश करता है।

स्विंग एक अधिक या कम-शुद्ध शुद्ध-जीयूआई है। यह एक ऑपरेटिंग सिस्टम विंडो बनाने के लिए AWT का उपयोग करता है और फिर उस विंडो में बटन, लेबल, टेक्स्ट, चेकबॉक्स इत्यादि के चित्रों को पेंट करता है, और आपके सभी माउस-क्लिक, कुंजी प्रविष्टियों इत्यादि का जवाब देता है, स्वयं निर्णय लेता है कि क्या करना है। ऑपरेटिंग सिस्टम को संभालने के बजाय इसे संभालें। इस प्रकार स्विंग 100% पोर्टेबल है और पूरे प्लेटफार्मों में एक ही है (हालांकि यह स्किनेबल है और इसमें "प्लगेबल लुक एंड फील" है जो इसे कम या ज्यादा बना सकता है जैसे कि देशी खिड़कियां और विगेट्स कैसे दिखेंगे)।

ये जीयूआई टूलकिट के लिए अलग-अलग दृष्टिकोण हैं और बहुत सारे परिणाम हैं। आपके प्रश्न का पूर्ण उत्तर उन सभी का पता लगाने की कोशिश करेगा। :) यहाँ एक जोड़े हैं:

AWT एक क्रॉस-प्लेटफ़ॉर्म इंटरफ़ेस है, इसलिए भले ही यह अपनी कार्यक्षमता के लिए अंतर्निहित OS या देशी GUI टूलकिट का उपयोग करता है, लेकिन यह उन सभी चीज़ों तक पहुँच प्रदान नहीं करता है जो उन टूलकिट्स कर सकते हैं। उन्नत या नए AWT विजेट्स जो एक प्लेटफॉर्म पर मौजूद हो सकते हैं, दूसरे पर समर्थित नहीं हो सकते हैं। हर प्लेटफ़ॉर्म पर समान नहीं होने वाली विगेट्स की विशेषताएँ समर्थित या बदतर नहीं हो सकती हैं, वे प्रत्येक प्लेटफ़ॉर्म पर अलग तरह से काम कर सकती हैं। लोग अपने एडब्ल्यूटी अनुप्रयोगों को प्लेटफार्मों भर में लगातार काम करने के लिए बहुत प्रयास करते थे - उदाहरण के लिए, वे जावा के मूल कोड में कॉल करने का प्रयास कर सकते हैं।

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

क्योंकि स्विंग एक मूल GUI विंडो द्वारा प्रदान किए गए बहुत कच्चे ग्राफिक्स रूटीन के अलावा जावा में हर संभव कोशिश करता है, यह AWT की तुलना में काफी अच्छा प्रदर्शन जुर्माना लगाता था। इसने स्विंग को दुर्भाग्य से धीमी गति से आगे बढ़ाया। हालाँकि, यह पिछले कई वर्षों में नाटकीय रूप से सिकुड़ा हुआ है क्योंकि अधिक अनुकूलित जेवीएम, तेज मशीनें, और (मैं अनुमान लगाता हूं) झूलते हुए इंटर्नल्स का अनुकूलन। आज एक स्विंग एप्लिकेशन इतनी तेजी से चल सकती है कि वह सेवा योग्य या यहां तक ​​कि ज़िप्पी हो, और मूल विजेट से एक एप्लिकेशन से लगभग अप्रभेद्य हो। कुछ कहेंगे कि इस मुकाम तक पहुंचने में बहुत लंबा समय लगा, लेकिन ज्यादातर कहेंगे कि यह इसके लायक है।

अंत में, आप SWT (ग्रहण के लिए उपयोग किया जाने वाला GUI टूलकिट, और AWT और स्विंग दोनों के लिए एक विकल्प) की जांच करना चाह सकते हैं, जो जावा के माध्यम से मूल विजेट तक पहुँचने के AWT विचार के लिए कुछ हद तक एक वापसी है।


उम ... कई प्लेटफार्मों में कुछ बहुत व्यापक स्विंग कर रहा है, मैं आपको बता सकता हूं कि यह बहुत अधिक प्लेटफार्मों के समान नहीं है। समान? ज़रूर। वही? बिल्कुल नहीं।
cletus

1
जावा 6 अपडेट 12 (देखें java.dzone.com/news/a-farewell-heavyweightlightwei ) के साथ हैवीवेट / लेटवेट समस्याएं गायब हो जाएंगी
डान डायर

वाह। मुझे विश्वास नहीं हो रहा है कि वे इसे ठीक कर सकते हैं, और मैं अभी भी विश्वास नहीं कर सकता कि हल्के और हैवीवेट घटक कभी भी वांछनीय होंगे। लेकिन यह अविश्वसनीय है कि वे इसे ठीक कर सकते हैं।
स्किपहॉपी

बस दोनों को भूल जाओ। WPF पर एक नजर :)
ऑपर ओसेटिन

3
यहाँ एक आधिकारिक जावा लेख है जो इस बात की पुष्टि करता है कि मिश्रण तय है: oracle.com/technetwork/articles/java/…
user193130

35

आधार अंतर जो पहले से ही सभी ने उल्लेख किया है कि एक भारी वजन है और दूसरा हल्का वजन है । मुझे समझाने की, मूल रूप से भारी वजन शब्द का क्या मतलब है कि जब आप awt घटकों का उपयोग कर रहे हैं तो देखने के घटक के लिए उपयोग किए जाने वाले मूल कोड को ऑपरेटिंग सिस्टम द्वारा उत्पन्न किया जाता है , यही कारण है कि यह ओएस से ओएस में बदलता है और महसूस करता है जहां झूले घटकों के रूप में घटक के लिए दृश्य उत्पन्न करने के लिए JVM की जिम्मेदारी है एक और बयान जो मैंने देखा कि स्विंग MVC आधारित है और awt नहीं है।


14
वास्तव में स्विंग एक मॉडल-डेलीगेट दृष्टिकोण का उपयोग करता है, जो MVC दृष्टिकोण से प्राप्त होता है, जहां व्यू और कंट्रोलर को एक डेलिगेट संरचना के लिए संयुक्त किया जाता है
पुरुषोत्तम

15

AWT बनाम स्विंग । मूल रूप से AWT पहले आया था और हैवीवेट UI घटकों का एक सेट है (जिसका अर्थ है कि वे ऑपरेटिंग सिस्टम ऑब्जेक्ट के लिए रैपर हैं) जबकि स्विंग AWT के शीर्ष पर हल्के घटकों के एक अमीर सेट के साथ बनाया गया है।

किसी भी गंभीर जावा यूआई का काम स्विंग नॉट एडब्ल्यूटी में किया जाता है, जिसका उपयोग मुख्य रूप से एप्लेट के लिए किया जाता था।


1
क्या ऐसे कोई मामले हैं जहां awt अधिक उपयोगी है / फिर उपयोग करने की सलाह दी जाती है?
समिक्षा

1
यह प्रासंगिक हुआ करता था ... 10 साल पहले।
बार्ट

@ स्पेसियर वह AWT के बारे में बात कर रहे थे, SWT नहीं

11

जब तक AWT स्विंग की तुलना में अधिक उपयोगी हो सकता है -

  • आप एक पुराने JVM या प्लेटफ़ॉर्म को लक्षित कर सकते हैं जो स्विंग का समर्थन नहीं करता है। यदि आप Applets का निर्माण कर रहे थे, तो यह वास्तव में खेल में आता था - आप सबसे कम आम भाजक को लक्षित करना चाहते थे ताकि लोगों को एक नया जावा प्लगइन स्थापित न करना पड़े। मुझे यकीन नहीं है कि जावा प्लगइन का वर्तमान सबसे व्यापक रूप से स्थापित संस्करण क्या है - यह आज अलग हो सकता है।
  • कुछ लोग स्विंग की 'काफी नहीं' प्लेटफ़ॉर्म खाल पर AWT का देशी लुक पसंद करते हैं। (स्विंग के कार्यान्वयन BTW की तुलना में बेहतर थर्ड पार्टी देशी दिखने वाली खाल हैं) स्विंग के FileChooser पर AWT के FileDialog का उपयोग करने के लिए बहुत से लोगों ने पसंद किया क्योंकि इसने प्लेटफ़ॉर्म फ़ाइल डायलॉग दिया था ज्यादातर लोगों को 'अजीब' कस्टम स्विंग के बजाय इस्तेमाल किया गया था।

2
लेकिन पिछले एक के लिए, हम एक FileChooser भी बना सकते हैं, जो बहुत हद तक विंडोज़ फाइल डायलॉग जैसा दिखता है (लेकिन कोई स्वत: पूर्ण नहीं) stackoverflow.com/q/17630055/2534090
JavaTechnical

9

AWT और स्विंग के बीच इस अंतर के परिणाम कई हैं।

AWT OS के शीर्ष पर कोड की एक पतली परत है, जबकि स्विंग बहुत बड़ा है। स्विंग में बहुत अधिक समृद्ध कार्यक्षमता है। AWT का उपयोग करते हुए, आपको कई चीजों को स्वयं लागू करना होगा, जबकि स्विंग ने उन्हें बनाया है। GUI- गहन कार्य के लिए, AWT स्विंग की तुलना में काम करने के लिए बहुत आदिम महसूस करता है। क्योंकि स्विंग ओएस होस्ट पर भरोसा करने के बजाय जीयूआई कार्यक्षमता को लागू करता है, यह जावा पर चलने वाले सभी प्लेटफार्मों पर एक समृद्ध वातावरण प्रदान कर सकता है। AWT सभी प्लेटफार्मों पर समान कार्यक्षमता की आपूर्ति करने में अधिक सीमित है क्योंकि सभी प्लेटफ़ॉर्म एक ही-दिखने वाले नियंत्रणों को एक ही तरीके से लागू नहीं करते हैं।

स्विंग घटकों को "लाइटवेट" कहा जाता है क्योंकि उन्हें अपनी कार्यक्षमता को लागू करने के लिए एक देशी ओएस ऑब्जेक्ट की आवश्यकता नहीं होती है। JDialogऔर JFrameहेवीवेट हैं, क्योंकि उनके पास एक सहकर्मी है। इसलिए JButton, जैसे घटक JTextArea, आदि हल्के होते हैं क्योंकि उनके पास ओएस पीयर नहीं होता है।

एक सहकर्मी ऑपरेटिंग सिस्टम द्वारा प्रदान किया जाने वाला एक विजेट है, जैसे कि बटन ऑब्जेक्ट या एंट्री फ़ील्ड ऑब्जेक्ट।


7

स्विंग:

  1. स्विंग, जावा फाउंडेशन कक्षाओं का हिस्सा है।
  2. स्विंग घटक प्लेटफार्म-स्वतंत्र हैं।
  3. स्विंग घटक हल्के घटक होते हैं क्योंकि स्विंग जाग के शीर्ष पर बैठता है।

AWT:

  1. AWT को सार विंडो टूल कहा जाता है।
  2. AWT घटक प्लेटफ़ॉर्म-निर्भर हैं।
  3. AWT घटक हैवीवेट घटक हैं।

5
  • स्विंग घटक बहुत लचीला उपयोगकर्ता इंटरफ़ेस प्रदान करता है क्योंकि यह मॉडल दृश्य नियंत्रक (एमवीसी) का पालन करता है।
  • awt mvc आधारित नहीं है।
  • स्विंग तेजी से काम करता है।
  • awt तेजी से काम नहीं करता है।
  • स्विंग कंपोनेंट्स हल्के वजन के होते हैं।
  • अजीब घटक भारी वजन हैं।
  • स्विंग कम मेमोरी स्थान पर रहती है।
  • awt अधिक स्मृति स्थान घेरता है।
  • स्विंग घटक प्लेटफ़ॉर्म स्वतंत्र है।
  • awt प्लेटफॉर्म पर निर्भर है।
  • स्विंग के लिए javax.swing पैकेज की आवश्यकता होती है।
  • awt को javax.awt पैकेज की आवश्यकता होती है।

10
मुझे नहीं लगता कि AWT की तुलना में स्विंग तेजी से काम करता है क्योंकि AWT देशी कोड (gui कोड) का उपयोग करता है जो पहले से ही OS में था, लेकिन स्विंग खरोंच से हर घटक बनाता है। तो AWT तेज़ हो सकता है। क्या आप मुझे कह सकते हैं कि स्विंग में तेजी से काम करने की आपकी बात क्या है ? धन्यवाद।
JavaTechnical

3

आवा १। AWT अधिक मेमोरी स्पेस 2 पर कब्जा कर लेता है। AWT प्लेटफॉर्म आश्रित 3 है। AWT को javax.awt पैकेज की आवश्यकता होती है

झूला 1। स्विंग कम स्मृति स्थान 2 पर है। स्विंग घटक प्लेटफ़ॉर्म 3 स्वतंत्र है। स्विंग के लिए javax.swing पैकेज की आवश्यकता होती है


1
क्या आप मुझे बता सकते हैं कि AWT अधिक मेमोरी स्पेस कैसे रखता है? क्योंकि यह देशी कोड का उपयोग करता है?
जावाटेक्निकल

awt के लिए java.awt की आवश्यकता होती है। *
abhisekp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.