Apa perbedaan antara Swing dan AWT?

Jawaban:

235

AWT adalah antarmuka Java ke kode GUI sistem asli yang ada di OS Anda. Ini tidak akan bekerja sama di setiap sistem, meskipun ia mencoba.

Swing adalah GUI Java yang kurang lebih murni. Ini menggunakan AWT untuk membuat jendela sistem operasi dan kemudian melukis gambar tombol, label, teks, kotak centang, dll., Ke jendela itu dan menanggapi semua klik mouse, entri kunci, dll., Memutuskan sendiri apa yang harus dilakukan bukannya membiarkan sistem operasi menanganinya. Dengan demikian Swing adalah 100% portabel dan sama di seluruh platform (meskipun itu skinnable dan memiliki "tampilan dan nuansa pluggable" yang dapat membuatnya terlihat lebih seperti bagaimana tampilan jendela dan widget asli).

Ini adalah pendekatan yang sangat berbeda untuk toolkit GUI dan memiliki banyak konsekuensi. Jawaban lengkap untuk pertanyaan Anda akan mencoba mengeksplorasi semua itu. :) Berikut adalah beberapa:

AWT adalah antarmuka lintas platform, jadi meskipun menggunakan OS yang mendasari atau toolkit GUI asli untuk fungsinya, AWT tidak menyediakan akses ke semua yang dapat dilakukan oleh toolkit tersebut. Widget AWT lanjutan atau yang lebih baru yang mungkin ada pada satu platform mungkin tidak didukung pada platform lain. Fitur widget yang tidak sama di setiap platform mungkin tidak didukung, atau lebih buruk, mereka mungkin bekerja secara berbeda di setiap platform. Orang-orang biasa menginvestasikan banyak upaya untuk membuat aplikasi AWT mereka bekerja secara konsisten di seluruh platform - misalnya, mereka dapat mencoba membuat panggilan ke kode asli dari Jawa.

Karena AWT menggunakan widget GUI asli, OS Anda tahu tentang mereka dan menangani menempatkannya di depan satu sama lain, dll., Sedangkan widget Swing adalah piksel yang tidak berarti dalam jendela dari sudut pandang OS Anda. Swing sendiri menangani tata letak dan penumpukan widget Anda. Mencampur AWT dan Swing sangat tidak didukung dan dapat menyebabkan hasil yang konyol, seperti tombol asli yang mengaburkan segala sesuatu yang lain di kotak dialog di mana mereka berada karena semuanya dibuat dengan Swing.

Karena Swing mencoba melakukan apa saja yang mungkin di Jawa selain dari rutinitas grafik yang sangat mentah yang disediakan oleh jendela GUI asli, itu digunakan untuk menimbulkan penalti kinerja yang cukup dibandingkan dengan AWT. Sayangnya, ini membuat Swing lambat untuk ditangkap. Namun, ini telah menyusut secara dramatis selama beberapa tahun terakhir karena JVM lebih dioptimalkan, mesin lebih cepat, dan (saya kira) optimasi internal Swing. Saat ini aplikasi Swing dapat berjalan cukup cepat untuk dapat diservis atau bahkan zippy, dan hampir tidak dapat dibedakan dari aplikasi menggunakan widget asli. Beberapa akan mengatakan butuh terlalu lama untuk sampai ke titik ini, tetapi sebagian besar akan mengatakan bahwa itu sepadan.

Terakhir, Anda mungkin juga ingin melihat SWT (toolkit GUI yang digunakan untuk Eclipse, dan alternatif untuk AWT dan Swing), yang agaknya merupakan gagasan AWT untuk mengakses Widget asli melalui Java.

skiphoppy
sumber
Um ... setelah melakukan Swing yang cukup luas di berbagai platform, saya dapat memberitahu Anda bahwa itu sangat tidak sama di seluruh platform. Serupa? Tentu. Sama? Tidak mungkin.
cletus
1
Masalah kelas berat / berat badan akan hilang dengan Java 6 pembaruan 12 (lihat java.dzone.com/news/a-farewell-heavyweightlightwei ).
Dan Dyer
Wow. Saya tidak percaya mereka bisa memperbaikinya, dan saya masih tidak percaya mencampur komponen yang ringan dan kelas berat akan diinginkan. Tetapi luar biasa bahwa mereka dapat memperbaikinya.
skiphoppy
Lupakan keduanya. Lihatlah WPF. :)
Alper Ozcetin
3
Berikut adalah artikel resmi Java yang mengonfirmasikan bahwa pencampuran telah diperbaiki: oracle.com/technetwork/articles/java/…
user193130
35

Perbedaan dasar yang telah disebutkan oleh semua orang adalah bahwa yang satu berat dan yang lain ringan . Mari saya jelaskan, pada dasarnya yang dimaksud dengan istilah heavy weight adalah bahwa ketika Anda menggunakan komponen awt, kode asli yang digunakan untuk mendapatkan komponen tampilan dihasilkan oleh Sistem Operasi , karena itulah perubahan tampilan dan nuansa dari OS ke OS. Sedangkan dalam komponen swing, tanggung jawab JVM untuk menghasilkan tampilan untuk komponen. Pernyataan lain yang saya lihat adalah ayunan itu berbasis MVC dan awt tidak.

Akses ditolak
sumber
14
sebenarnya Swing menggunakan pendekatan Model-Delegate, yang berasal dari pendekatan MVC, di mana dalam Tampilan dan Pengendali digabungkan untuk struktur Delegasi
Purushottam
15

Ayunan vs AWT . Pada dasarnya AWT datang pertama dan merupakan satu set komponen UI kelas berat (artinya mereka adalah pembungkus untuk objek sistem operasi) sedangkan Swing dibangun di atas AWT dengan satu set komponen ringan yang lebih kaya.

Setiap pekerjaan Java UI serius dilakukan di Swing, bukan AWT, yang terutama digunakan untuk applet.

cletus
sumber
1
apakah ada kasus di mana awt lebih berguna / disarankan untuk digunakan daripada diayunkan?
Samiksha
1
Dulu relevan ... 10 tahun yang lalu.
Bart
@Pacerier dia berbicara tentang AWT, bukan SWT
11

Sejauh ketika AWT mungkin lebih berguna daripada Swing -

  • Anda mungkin menargetkan JVM atau platform lama yang tidak mendukung Swing. Ini digunakan untuk benar-benar berperan jika Anda membuat Applet - Anda ingin menargetkan penyebut umum terendah sehingga orang tidak perlu menginstal plugin Java yang lebih baru. Saya tidak yakin apa versi plugin Java yang paling banyak diinstal saat ini - ini mungkin berbeda hari ini.
  • beberapa orang lebih suka tampilan asli AWT daripada platform 'tidak cukup' kulit Swing. (Ada kulit pihak ke-3 yang tampak lebih baik daripada implementasi Swing BTW) Banyak orang lebih suka menggunakan FileTialog AWT daripada FileChooser Swing karena itu memberikan dialog file platform yang kebanyakan orang terbiasa daripada yang kustom Swing 'aneh'.
Nate
sumber
2
Tetapi untuk yang terakhir, kita juga dapat membuat FileChooser yang mirip dialog file windows (tetapi tanpa autocomplete) stackoverflow.com/q/17630055/2534090
JavaTechnical
9

Beberapa konsekuensi dihasilkan dari perbedaan antara AWT dan Swing ini.

AWT adalah lapisan kode tipis di atas OS, sedangkan Swing jauh lebih besar. Swing juga memiliki fungsionalitas yang lebih kaya. Menggunakan AWT, Anda harus mengimplementasikan banyak hal sendiri, sementara Swing membuatnya terintegrasi. Untuk pekerjaan intensif GUI, AWT terasa sangat primitif untuk digunakan dibandingkan dengan Swing. Karena Swing mengimplementasikan fungsionalitas GUI itu sendiri daripada mengandalkan OS host, ia dapat menawarkan lingkungan yang lebih kaya pada semua platform yang dijalankan oleh Java. AWT lebih terbatas dalam menyediakan fungsionalitas yang sama pada semua platform karena tidak semua platform menerapkan kontrol yang tampak sama dengan cara yang sama.

Komponen ayun disebut "ringan" karena tidak memerlukan objek OS asli untuk mengimplementasikan fungsinya. JDialogdan JFramekelas berat, karena mereka memiliki teman sebaya. Jadi komponen seperti JButton, JTextAreadll., Ringan karena mereka tidak memiliki rekan OS.

Sebuah rekan adalah widget yang disediakan oleh sistem operasi, seperti objek tombol atau objek entri lapangan.

Surendra Bharadwaj
sumber
7

Ayunan:

  1. Swing adalah bagian dari kelas dasar java.
  2. Komponen ayun tidak tergantung platform.
  3. Komponen ayun adalah komponen yang ringan karena ayunan berada di atas awt.

AWT:

  1. AWT disebut alat jendela abstrak.
  2. Komponen AWT bergantung pada platform.
  3. Komponen AWT adalah komponen kelas berat.
deepika
sumber
5
  • Komponen swing menyediakan banyak antarmuka pengguna yang fleksibel karena ia mengikuti model view controller (mvc).
  • awt tidak berbasis mvc.
  • Ayunan bekerja lebih cepat.
  • awt tidak bekerja lebih cepat.
  • komponen ayun ringan.
  • komponen awt berat berat.
  • Ayunan menempati lebih sedikit ruang memori.
  • awt menempati lebih banyak ruang memori.
  • komponen swing adalah platform independen.
  • awt tergantung pada platform.
  • ayunan membutuhkan paket javax.swing.
  • awt memerlukan paket javax.awt.
arsh
sumber
10
Saya tidak berpikir ayunan bekerja lebih cepat daripada AWT karena AWT menggunakan kode asli (kode gui) yang sudah ada di OS tetapi ayunan membangun setiap komponen dari awal. Jadi AWT mungkin lebih cepat. Bisakah Anda mengatakan kepada saya apa sudut pandang Anda dalam mengatakan ayunan bekerja lebih cepat ? Terima kasih.
JavaTechnical
3

AWT 1. AWT menempati lebih banyak ruang memori 2. AWT tergantung pada platform 3. AWT membutuhkan paket javax.awt

ayunan 1. Ayunan menempati lebih sedikit ruang memori 2. Komponen swing adalah platform independen 3. Swing membutuhkan paket javax.swing

B.DastagiriReddy
sumber
1
Bisakah Anda mengatakan kepada saya bagaimana AWT menempati lebih banyak ruang memori? Karena menggunakan kode asli?
JavaTechnical
awt membutuhkan java.awt. *
abhisekp