Aplikasi Java Desktop: SWT vs. Swing [ditutup]

158

Saya seorang pengembang web di siang hari dan berpikir untuk membangun aplikasi desktop nyata pertama saya. Idenya adalah untuk membangun alat yang mengotomatiskan tugas yang sangat berulang dalam aplikasi web di mana tidak ada API yang tersedia.

Saya tahu saya ingin menggunakan Java. Saya menggunakannya sebelumnya untuk hal-hal web, tahu sintaks cukup baik dan ingin aplikasi menjadi lintas plattform semudah mungkin.

Di mana saya tidak begitu yakin apakah saya harus menggunakan SWT atau Swing. Karena audiens utama saya menggunakan Windows, saya ingin melihatnya asli di sana. Linux dan Mac harus bekerja, tetapi tampilannya tidak begitu penting di sini.

Jadi apa argumen untuk dan terhadap setiap Kerangka UI, Swing atau SWT?

Terima kasih.

PS: Saya kembangkan di Windows menggunakan Eclipse. Tapi sedang berpikir tentang bermain dengan Netbeans.

janpio
sumber
Pertanyaan sulit. :-) Saya akan pergi dengan Swing. Tapi, tidak punya PRO atau KON untuk keputusan itu.
Pablo Santa Cruz
duplikat Q. silakan mencari Swing vs. SWT Q yang diminta sudah pada SO. FWIW, saya menggunakan Swing hanya karena saya belajar seperti itu. Ada perpustakaan tampilan-dan-nuansa asli (lihat jgoodies looks)
Jason S
"membangun alat yang mengotomatiskan tugas yang sangat berulang dalam aplikasi web" - ada info tentang ini? Mungkin ada alat yang ada - dan saya mempertanyakan perlunya aplikasi desktop untuk mengotomatisasi ini - mungkin berfungsi dalam kasus Anda sekarang - tetapi bagaimana jika Anda pindah ke solusi yang dihosting?
Nate
Anda tidak perlu mempelajari kerangka kerja GUI untuk aplikasi desktop. Jika Anda dapat menggunakan html css dan js (yang saya asumsikan demikian), Anda dapat menggunakan Elektron untuk membangun aplikasi yang tampak asli dengan bahasa web.
Pranav A.
Elektron ditemukan beberapa tahun setelah saya mengajukan pertanyaan ini;) Tapi tentu saja hari ini Anda benar.
janpio

Jawaban:

152

Ayunan Pro:

  • bagian dari perpustakaan java, tidak perlu untuk perpustakaan asli tambahan
  • bekerja dengan cara yang sama di semua platform
  • Editor GUI terintegrasi dalam Netbeans dan Eclipse
  • tutorial online yang bagus dari Sun / Oracle
  • Didukung oleh ekstensi java resmi (seperti java OpenGL)

Cons Swing:

  • Tampilan dan nuansa asli mungkin berperilaku berbeda dari sistem asli asli.
  • komponen berat (asli / awt) menyembunyikan komponen ayun, bukan masalah sebagian besar waktu karena penggunaan komponen berat agak jarang

Pro SWT:

  • menggunakan elemen asli jika memungkinkan, jadi selalu perilaku asli
  • didukung oleh eclipse, gui editor VEP (VEP juga mendukung Swing dan AWT)
  • sejumlah besar contoh online
  • memiliki jembatan awt / swt yang terintegrasi untuk memungkinkan penggunaan komponen awt dan swing

Kontra SWT:

  • membutuhkan pustaka asli untuk setiap sistem yang didukung
  • mungkin tidak mendukung setiap perilaku di semua sistem karena sumber daya asli yang digunakan (opsi petunjuk)
  • mengelola sumber daya asli, sementara komponen asli akan sering dibuang bersama induknya, sumber daya lain seperti Font harus dirilis secara manual atau terdaftar sebagai pendengar yang dibuang ke suatu komponen untuk rilis otomatis.
Josefx
sumber
33
Ayunan akan lebih dekat ke "menulis sekali, jalankan di mana saja". SWT akan lebih seperti "tulis sekali, tweak / tes di mana-mana". Tetapi diskusi yang sama juga terjadi dengan bahasa lain.
Tandai
12
Secara realistis, tampilan dan nuansa "Asli" dari Swing berperilaku sangat berbeda dari desktop Gnome saya - sementara, untuk beberapa alasan, temanya bekerja cukup baik, menu-menu terlihat buruk dan hampir tidak dapat digunakan.
Hut8
9
Dimulai dengan Eclipse 3.7, VEP digantikan oleh WindowBuilder (yang juga mendukung Swing dan SWT).
Alexey Romanov
6
Keuntungan SWT juga kurang konsumsi memori karena komponen asli. Ini harus diinginkan pada mesin dengan memori terbatas dan perbedaan memori antara swing dan swt bisa besar dalam desain GUI besar.
jantobola
1
@ JanTobola Jelas salah. Komponen asli menggunakan memori yang dialokasikan pada heap asli, tidak hanya pada heap Java. Saya telah bekerja pada GUI besar menggunakan Platform Netbeans, Eclipse RCP, SWT dan Swing. Ada beberapa kekhawatiran serius tentang jejak memori di Swing di versi Java yang sangat awal (ketika itu adalah perpustakaan pihak ketiga dan setelah dari 1,1 ke 1,2 juga? ) tetapi itu tidak lagi benar dan terserah pada pengembang untuk merilis banyak sumber daya di SWT, ada lebih banyak peluang kebocoran memori dengan SWT sedangkan komponen yang tidak direferensikan berakhir dengan menjadi "dibuang" dengan Swing.
gouessej
63

Suatu hal penting untuk dipertimbangkan adalah bahwa beberapa pengguna dan beberapa reseller (Dell) menginstal VM 64 bit pada Windows 64 bit mereka, dan Anda tidak dapat menggunakan perpustakaan SWT yang sama pada VM 32 bit dan 64 bit.

Ini berarti Anda harus mendistribusikan dan menguji paket yang berbeda tergantung pada apakah pengguna memiliki VM Java 32-bit atau 64-bit. Lihat masalah ini dengan Azureus, misalnya, tetapi Anda juga memilikinya dengan Eclipse, di mana saat ini versi build di halaman unduhan depan tidak berjalan pada VM 64 bit.

Ludovico Fischer
sumber
2
Poin yang menarik. Sebagai pengguna saya masih bingung mengapa ini masalah besar. Tapi ya, jadi saya harus mempertimbangkan ini. Terima kasih.
janpio
btw: javaws (webstart) tidak tersedia untuk 64 IMHO
Karussell
1
@ Karussell: Pada 3/4/2011, Sun's JVM 64-bit untuk Windows memiliki dukungan JNLP. Saya pikir itu benar untuk sementara waktu, tetapi saya tidak yakin berapa lama.
The Alchemist
23

pro swing:

  • Keuntungan terbesar dari swing IMHO adalah bahwa Anda tidak perlu mengirim pustaka dengan aplikasi Anda (yang menghindari lusinan MB (!)).
  • Tampilan dan rasa asli jauh lebih baik untuk ayunan daripada di tahun-tahun awal
  • kinerja sebanding dengan swt (ayunan tidak lambat!)
  • NetBeans menawarkan Matisse sebagai pembangun komponen yang nyaman.
  • Integrasi komponen Swing dalam JavaFX lebih mudah.

Tetapi pada intinya saya tidak akan menyarankan untuk menggunakan ayunan 'murni' atau swt ;-) Ada beberapa kerangka kerja aplikasi untuk swing / swt out. Lihat di sini . Pemain terbesar adalah netbeans (swing) dan eclipse (swt). Kerangka kerja lain yang bagus bisa berupa griffon dan 'set komponen' yang bagus adalah pivot (swing). Griffon sangat menarik karena mengintegrasikan banyak perpustakaan dan tidak hanya mengayun ; juga pivot, swt, dll

Karussell
sumber
1
Ya NetBeans memiliki Matisse sebagai pembangun GUI, tetapi kodenya benar-benar bertele-tele, membingungkan untuk dibaca, dan hampir tidak mungkin diedit oleh kode sumber. Jika Anda benar-benar menginginkan pembangun GUI, pergilah dengan gerhana WindowBuilder
Pranav A.
13

Saya akan menggunakan Swing untuk beberapa alasan.

  • Sudah ada lebih lama dan memiliki lebih banyak upaya pengembangan diterapkan untuk itu. Oleh karena itu kemungkinan fitur lebih lengkap dan (mungkin) memiliki lebih sedikit bug.

  • Ada banyak dokumentasi dan panduan lain tentang cara menghasilkan aplikasi pemain.

  • Sepertinya perubahan pada Swing merambat ke semua platform secara bersamaan sementara perubahan pada SWT tampaknya muncul di Windows terlebih dahulu, kemudian Linux.

Jika Anda ingin membangun aplikasi yang sangat kaya fitur, Anda mungkin ingin memeriksa NetBeans RCP (Rich Client Platform). Ada kurva belajar, tetapi Anda dapat menyusun aplikasi yang bagus dengan cepat dengan sedikit latihan. Saya tidak memiliki pengalaman yang cukup dengan platform Eclipse untuk membuat penilaian yang valid.

Jika Anda tidak ingin menggunakan seluruh RCP, NetBeans juga memiliki banyak komponen berguna yang dapat ditarik dan digunakan secara independen.

Satu kata nasihat lainnya, lihat ke manajer tata letak yang berbeda. Mereka membuat saya tersandung untuk waktu yang lama ketika saya sedang belajar. Beberapa yang terbaik bahkan tidak ada di perpustakaan standar. Alat MigLayout (untuk Swing dan SWT) dan JGoodies Forms adalah dua yang terbaik menurut saya.

clartaq
sumber
10

Saya harus memilih swing hanya karena itu "asli" untuk java.

Plus, lihat di http://swingx.java.net/ .

memusatkan perhatian
sumber
1
Tautan rusak!
Socrates
8

Untuk kebutuhan Anda, sepertinya intinya adalah menggunakan Swing karena sedikit lebih mudah untuk memulainya dan tidak terintegrasi secara erat ke platform asli seperti SWT.

Ayunan biasanya adalah taruhan yang aman.

Yuval Adam
sumber
6

Pertanyaan menarik. Saya tidak tahu SWT terlalu baik untuk membual tentang hal itu (tidak seperti Swing dan AWT) tapi inilah perbandingan yang dilakukan pada SWT / Swing / AWT.

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

Dan inilah situs di mana Anda bisa mendapatkan tutorial tentang apa saja di SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

Semoga Anda membuat keputusan yang tepat (jika ada keputusan yang benar dalam pengkodean) ... :-)

Buhake Sindi
sumber
4
Tetapi perhatikan bahwa artikel ini berasal dari tahun 2003 ...
Alexey Romanov
4

Jika Anda berencana untuk membangun aplikasi fungsional penuh dengan lebih dari beberapa fitur, saya akan menyarankan untuk langsung menggunakan Eclipse RCP sebagai kerangka kerjanya.

Jika aplikasi Anda tidak akan tumbuh terlalu besar atau persyaratan Anda terlalu unik untuk ditangani oleh kerangka kerja normal, Anda dapat melompat dengan aman menggunakan Swing.

Pada akhirnya, saya sarankan Anda mencoba kedua teknologi untuk menemukan yang lebih cocok untuk Anda. Seperti Netbeans vs Eclipse vs IntelliJ, tidak ada jawaban yang benar mutlak di sini dan kedua kerangka kerja memiliki kelemahan sendiri.

Ayunan Pro:

  • lebih banyak ahli
  • lebih mirip Java (hampir tidak ada bidang publik, tidak perlu membuang sumber daya)

Pro SWT:

  • lebih banyak OS asli
  • lebih cepat
nanda
sumber
10
Saya pikir poin "lebih cepat" sangat kontroversial.
Russ Hayward
SWT rumit untuk digunakan, saya harus menguji GUI saya dengan setiap versi Windows, beberapa bug hanya dapat direproduksi di bawah Windows Vista. Beberapa metode tidak diterapkan atau panggil AWT di bawah tenda yang artinya Anda tidak dapat menggunakan JRE yang ringkas tanpa AWT dan Ayun tanpa risiko memecah SWT. Saya mulai menggunakan SWT pada tahun 2009 dan menurut pendapat saya, itu tidak lebih cepat. Saya menyarankan Anda untuk memberikan tolok ukur yang dirancang dengan cermat.
gouessej
4

Satu hal yang perlu dipertimbangkan: Pembaca layar

Untuk beberapa alasan, beberapa komponen Swing tidak berfungsi dengan baik ketika menggunakan screenreader (dan Java AccessBridge untuk Windows). Ketahuilah bahwa berbagai pembaca layar menghasilkan perilaku yang berbeda. Dan dalam pengalaman saya, SWT-Tree melakukan jauh lebih baik daripada Swing-Tree dalam kombinasi dengan screenreader. Jadi aplikasi kami akhirnya menggunakan komponen SWT dan Swing.

Untuk mendistribusikan dan memuat perpustakaan SWT yang tepat, Anda mungkin menemukan tautan ini berguna: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

incomudro
sumber
3

SWT diciptakan sebagai respons terhadap kelesuan Swing di sekitar pergantian abad. Sekarang karena perbedaan dalam kinerja menjadi diabaikan, saya pikir Swing adalah pilihan yang lebih baik untuk aplikasi standar Anda. SWT / Eclipse memiliki kerangka kerja yang bagus yang membantu dengan banyak kode pelat ketel.

Oliver Watkins
sumber