Swing ve AWT arasındaki fark nedir?


Yanıtlar:


235

AWT, işletim sisteminizde bulunan yerel sistem GUI koduna yönelik bir Java arabirimidir. Denemesine rağmen her sistemde aynı şekilde çalışmaz.

Swing, az çok saf Java GUI'sidir. Bir işletim sistemi penceresi oluşturmak için AWT'yi kullanır ve daha sonra bu pencereye düğmelerin, etiketlerin, metinlerin, onay kutularının vb. Resimlerini boyar ve tüm fare tıklamaları, tuş girişleri vb. işletim sisteminin halletmesine izin vermek yerine. Bu nedenle Swing% 100 taşınabilirdir ve platformlar arasında aynıdır (kaplanabilir ve yerel pencerelerin ve widget'ların nasıl göründüğü gibi aşağı yukarı görünmesini sağlayan "takılabilir bir görünüm ve his" olmasına rağmen).

Bunlar GUI araç setlerine çok farklı yaklaşımlardır ve birçok sonucu vardır. Sorunuza tam bir cevap, tüm bunları araştırmaya çalışacaktır. :) İşte bir çift:

AWT, platformlar arası bir arabirimdir, bu nedenle işlevselliği için temel OS veya yerel GUI araç kitini kullanmasına rağmen, bu araç setlerinin yapabileceği her şeye erişim sağlamaz. Bir platformda bulunabilecek gelişmiş veya daha yeni AWT widget'ları başka bir platformda desteklenmeyebilir. Her platformda aynı olmayan widget'ların özellikleri desteklenmeyebilir veya daha da kötüsü, her platformda farklı şekilde çalışabilir. İnsanlar AWT uygulamalarının platformlar arasında tutarlı bir şekilde çalışmasını sağlamak için çok çaba harcarlardı - örneğin, Java'dan yerel koda çağrı yapmaya çalışabilirler.

AWT yerel GUI widget'larını kullandığı için, işletim sisteminiz bunları bilir ve bunları birbirlerinin önüne koyar, vb. İşlerken, Swing widget'ları bir pencerede işletim sisteminizin bakış açısından anlamsız piksellerdir. Swing'in kendisi widget'larınızın düzenini ve yığınını işler. AWT ve Swing'i karıştırmak son derece desteklenmez ve Swing ile diğer her şey yaratıldığı için içinde bulundukları iletişim kutusundaki diğer her şeyi gizleyen yerel düğmeler gibi saçma sonuçlara yol açabilir.

Swing, Java'da yerel bir GUI penceresi tarafından sağlanan çok ham grafik rutinleri dışında mümkün olan her şeyi yapmaya çalıştığından, AWT'ye kıyasla oldukça performans cezasına neden oldu. Bu Swing'i maalesef yavaş yavaş yakaladı. Bununla birlikte, bu daha iyi optimize edilmiş JVM'ler, daha hızlı makineler ve Swing iç bileşenlerinin (sanırım) optimizasyonu nedeniyle son birkaç yılda önemli ölçüde küçüldü. Bugün bir Swing uygulaması, servis edilebilir ve hatta zippy olacak kadar hızlı çalışabilir ve yerel widget'ları kullanan bir uygulamadan neredeyse ayırt edilemez. Bazıları bu noktaya gelmenin çok uzun sürdüğünü söyleyecek, ancak çoğu buna değdiğini söyleyecek.

Son olarak, SWT'ye (Eclipse için kullanılan GUI araç seti ve hem AWT hem de Swing'e bir alternatif) göz atmak isteyebilirsiniz, bu da AWT'nin Java aracılığıyla yerel Widget'lara erişme fikrine bir dönüş.


Um ... birden fazla platformda oldukça geniş bir Swing yaptıktan sonra, bunun platformlar arasında çok fazla olmadığını söyleyebilirim. Benzer? Elbette. Aynı? Olmaz.
cletus

1
Ağır / hafif ağırlık sorunları Java 6 güncelleme 12 ile ortadan kalkacaktır (bkz. Java.dzone.com/news/a-farewell-heavyweightlightwei ).
Dan Dyer

Vay. Bunu düzeltebileceklerine inanamıyorum ve yine de hafif ve ağır bileşenlerin karıştırılmasının arzu edileceğine inanamıyorum. Ancak bunu düzeltebilecekleri inanılmaz.
skiphoppy

Sadece ikisini de unut. WPF'ye bir göz atın. :)
Alper Ozcetin

3
Karıştırmanın düzeltildiğini doğrulayan resmi bir Java makalesi: oracle.com/technetwork/articles/java/…
user193130

35

Zaten herkesin bahsettiği temel fark, birinin ağır ve diğerinin hafif olmasıdır . Temel olarak ağır ağırlık teriminin ne anlama geldiğini açıklayayım, awt bileşenlerini kullandığınızda, görünüm bileşenini almak için kullanılan yerel kod İşletim Sistemi tarafından oluşturulur , bu yüzden görünüm ve his OS'den OS'ye değişir . Salıncak bileşenlerinde olduğu gibi, bileşenlerin görünümünü oluşturmak JVM'nin sorumluluğundadır . Gördüğüm başka bir ifade, salıncak MVC tabanlı ve awt değil olmasıdır.


14
Aslında Swing, Görünüm ve Denetleyicide Delege yapısı için birleştirilen MVC yaklaşımından türetilen bir Model-Delege yaklaşımı kullanır
Purushottam

15

AWT'ye karşı salıncak . Temel olarak AWT önce geldi ve bir dizi ağır UI bileşeni (yani işletim sistemi nesneleri için sarmalayıcılar), Swing daha zengin bir hafif bileşen seti ile AWT'nin üzerine inşa edildi.

Herhangi bir ciddi Java UI çalışması, esas olarak uygulamalar için kullanılan AWT değil Swing'de yapılır.


1
awt'ın daha sonra salıncakta kullanmanın daha yararlı / tavsiye edildiği durumlar var mı?
Samiksha

1
Alakalıydı ... 10 yıl önce.
bart

@Pacerier SWT değil AWT hakkında konuşuyordu

11

AWT'nin Swing'ten daha yararlı olabileceği ölçüde -

  • Swing'i desteklemeyen eski bir JVM'yi veya platformu hedefliyor olabilirsiniz. Bu, eğer Applets oluşturuyorsanız gerçekten oyuna giriyordu - insanların en yeni ortak paydayı hedeflemek istediniz, böylece insanlar daha yeni bir Java eklentisi kurmak zorunda kalmayacaksınız. Java eklentisinin şu anda en çok yüklü sürümünün ne olduğundan emin değilim - bu bugün farklı olabilir.
  • bazı insanlar AWT'nin yerel görünümünü Swing'in 'tam olarak orada değil' platform kaplamalarına tercih ederler. (Swing'in BTW uygulamalarından daha iyi 3. taraf yerli görünümlü kaplamalar vardır) Çoğu insan 'garip' özel Swing olandan ziyade platform dosyası diyalogunu verdiği için AWT'nin FileDialog'unu Swing'in FileChooser'ı üzerinden tercih etti.

2
Ancak sonuncusu için, windows dosyası iletişim kutusuna benzeyen bir FileChooser da oluşturabiliriz (ancak otomatik tamamlama olmadan) stackoverflow.com/q/17630055/2534090
JavaTechnical

9

AWT ve Swing arasındaki bu farktan birkaç sonuç ortaya çıkar.

AWT, işletim sisteminin üstünde ince bir kod katmanıdır, oysa Swing çok daha büyüktür. Swing ayrıca çok daha zengin bir işleve sahiptir. AWT'yi kullanarak, birçok şeyi kendiniz uygulamalısınız, Swing'de yerleşik olarak bulunur. GUI yoğun çalışma için AWT, Swing'e kıyasla çalışmak için çok ilkel hissediyor. Swing, ana bilgisayar işletim sistemine güvenmek yerine GUI işlevini kendisi uyguladığından, Java'nın çalıştığı tüm platformlarda daha zengin bir ortam sunabilir. AWT tüm platformlarda aynı işlevselliği sağlama konusunda daha sınırlıdır, çünkü tüm platformlar aynı görünümlü kontrolleri aynı şekilde uygulamamaktadır.

Salıncak bileşenleri işlevlerini uygulamak için yerel bir OS nesnesine ihtiyaç duymadıkları için "hafif" olarak adlandırılır. JDialogve JFrameağırdırlar, çünkü akranları vardır. Bileşenler gibi Yani JButton, JTextAreaonlar bir OS akran yok çünkü, vb hafiftir.

Bir bir düğme nesnesi ya da bir girdi alanı nesnesi olarak işletim sistemi tarafından sunulan bir widgettır.


7

Salıncak:

  1. Salıncak, java temel sınıflarının bir parçasıdır.
  2. Salıncak bileşenleri platformdan bağımsızdır.
  3. Salınım bileşenleri hafiftir, çünkü salınım atığın tepesinde bulunur.

AWT:

  1. AWT'ye soyut pencere aracı denir.
  2. AWT bileşenleri platforma bağlıdır.
  3. AWT bileşenleri ağır bileşenlerdir.

5
  • swing bileşeni, model görünüm denetleyicisini (mvc) takip ettiği için çok esnek bir kullanıcı arabirimi sağlar.
  • awt mvc tabanlı değildir.
  • salıncak daha hızlı çalışır.
  • awt daha hızlı çalışmıyor.
  • salıncak bileşenleri hafiftir.
  • awt bileşenleri ağırdır.
  • swing daha az bellek alanı kaplar.
  • awt daha fazla bellek alanı kaplar.
  • swing bileşeni platformdan bağımsızdır.
  • awt platforma bağlıdır.
  • swing javax.swing paketi gerektirir.
  • awt javax.awt paketi gerektirir.

10
AWT, işletim sisteminde zaten var olan yerel kodu (gui kodu) kullandığından, ancak salıncak sıfırdan her bileşeni oluşturduğundan, salıncak AWT'den daha hızlı çalıştığını sanmıyorum. Bu nedenle AWT daha hızlı olabilir. Salıncağın daha hızlı çalıştığını söylerken ne düşünüyorsun ? Teşekkürler.
JavaTechnical

3

AWT 1. AWT daha fazla bellek alanı kaplar 2. AWT platforma bağımlıdır 3. AWT javax.awt paketi gerektirir

salıncaklar 1. Salıncak daha az bellek alanı kaplar 2. Salıncak bileşeni platformdan bağımsızdır 3. Salıncak javax.swing paketi gerektirir


1
AWT'nin nasıl daha fazla bellek alanı kapladığını söyleyebilir misiniz? Yerel kod kullandığından?
JavaTechnical

awt gerektirir java.awt. *
abhisekp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.