Kerangka kerja GUI Java. Apa yang harus dipilih? Ayunan, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot? [Tutup]

228

Ada cukup banyak kerangka kerja gui di luar sana untuk java, tetapi apa yang diakui sebagai kerangka pilihan saat ini?

Berikut ini adalah pemahaman saya tentang kerangka kerja yang berbeda, tolong perbaiki saya jika saya salah. Ini adalah serangkaian pertanyaan yang sangat longgar, tetapi saya masih berpikir itu berharga bagi siapa pun yang berpikir untuk membuat aplikasi gui yang kaya.


AWT

Merupakan dasar dari ayunan, ia berkinerja baik tetapi kurang komponen canggih. Jika Anda bermaksud membuat aplikasi yang kaya, AWT mungkin bukan cara yang tepat. Namun untuk aplikasi gui yang lebih kecil yang tidak memerlukan antarmuka pengguna yang kaya. Ini mungkin cocok dengan sempurna karena kerangka kerja yang telah dicoba dan terbukti.


Ayunan

Berdasarkan AWT seperti yang dinyatakan sebelumnya. Dalam masa pertumbuhannya dianggap lambat dan bermasalah dan menyebabkan IBM membuat SWT untuk Eclipse. Namun dengan Java 5 (atau 6?) Swing menjadi kerangka pilihan untuk membangun aplikasi baru. Ayunan memiliki banyak komponen yang kaya tetapi masih kurang di beberapa daerah. Salah satu contohnya adalah tidak ada komponen TreeTable berfitur lengkap yang dapat melakukan penyortiran dan pemfilteran / pencarian.


SWT

Diciptakan oleh IBM untuk Eclipse, mereka tampaknya berpikir bahwa Swing tidak cocok untuk Eclipse saat itu. Dengan sendirinya adalah level yang cukup rendah, dan ia menggunakan widget asli platform melalui JNI. Ini tidak terkait dengan Swing dan AWT sama sekali. Namun API mereka agak kikuk dan tidak intuitif. Mereka memiliki beberapa komponen canggih seperti TreeTable. (tapi saya tidak berpikir mereka mendukung penyortiran dan penyaringan di luar kotak). SWT menggunakan beberapa binding asli (melalui JNI?) Dan kata-kata kasar di internet adalah bahwa kerangka kerja ini tidak boleh digunakan dalam proyek saat ini. (kenapa tidak?)


SwingX

Berdasarkan Swing dan misinya adalah menciptakan komponen yang kaya untuk swing. Masih dalam pengembangan. (meskipun tidak terlalu aktif.) Memiliki set komponen yang sangat bagus, seperti misalnya TreeTable. Tetapi TreeTable tidak mendukung pemfilteran dan pengurutan sejauh yang saya tahu. Namun itu mendukung pencarian dengan penyorotan.

Perhatikan bahwa SwingX adalah komponen (AFAIU) yang merupakan ekstensi atau komposisi dari komponen Swing yang ada


JGoodies

Kerangka kerja yang saya tidak tahu tentang ... Apa itu kekuatan dan kelemahan? Apa yang membedakan Jgoodies dari yang lain?

JGoodies OTOH adalah tentang PLAF dan tata letak.


JavaFX

Unggulan terbaru Java / Oracle. berjanji untuk menjadi standar facto dalam mengembangkan aplikasi desktop atau web yang kaya.


Apache Pivot

Ini membuat UI menggunakan Java2D, sehingga meminimalkan dampak (IMO, kembung) warisan Swing dan AWT. (@Augustus Thoo)

Fokus utamanya sepertinya ada pada RIA (aplikasi internet Rich), tetapi sepertinya itu juga bisa diterapkan pada aplikasi desktop. Dan sebagai komentar pribadi, Terlihat sangat menarik! Saya terutama suka itu proyek apache.

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html


Qt Jambi

Wrapper java ke pustaka qt asli yang ditulis dalam c / c ++. Sangat kuat, banyak digunakan dan diterima. Memiliki banyak komponen GUI dan API yang mudah digunakan.

http://qt-jambi.org/


Jadi, untuk mencoba meringkas sedikit dari apa yang saya tanyakan:

Katakanlah saya ingin membuat aplikasi desktop hari ini di Jawa yang melibatkan banyak komponen canggih, apa yang harus saya pilih? Dan mengapa?

Kerangka kerja mana yang harus diakui sudah usang dan mana yang harus diakui sebagai kerangka kerja masa depan yang jauh?

Apakah kerangka kerja standar de-facto saat ini dan alat apa yang Anda gunakan untuk membuat aplikasi java gui?


Saya mungkin menyesal menanyakan hal ini, tetapi saya tidak mencobanya:

C # /. Net dikatakan memiliki seperangkat komponen yang sangat mudah digunakan yang dapat dilenturkan ke segala arah. Dan setelah menyelidiki kerangka kerja java yang berbeda sampai batas tertentu saya tidak bisa mengatakan hal yang sama tentang Java. Kenapa ini? Mengapa java (yang merupakan bahasa pemrograman yang paling banyak digunakan di dunia) memiliki komponen GUI yang sama?

Apakah hanya bahwa java telah mendasarkan komponen gui mereka pada level yang jauh lebih rendah, dan dimungkinkan untuk menulis semua komponen canggih yang saya cari, tetapi Anda harus melakukan banyak hal jika tidak semua pekerjaan sendiri?

netbrain
sumber
Saya tidak menyadari bahwa SWT "didasarkan pada kombinasi AWT dan Swing". Apakah benar hal itu merupakan masalahnya? Saya pikir itu murni JNI untuk menjalankan sistem windowing OS ...
Rich
@ Rich Oh, katanya di salah satu komentar jawaban. Saya hanya berasumsi mereka tahu apa yang mereka bicarakan.
netbrain
4
Saya pikir Anda bingung "UI Toolkit" dan "kerangka kerja GUI". AWT, Swing dan SWT adalah toolkit UI tapi saya pasti tidak akan menyebut mereka "frameworks". Kerangka kerja didasarkan pada toolkit UI yang diberikan dan menyediakan lem untuk membangun aplikasi Anda. Pertama, Anda harus memilih toolkit UI dan kemudian memilih kerangka kerja yang berfungsi pada toolkit itu. FWIW, saya akan memilih Swing dengan kerangka Guts-GUI buatan saya sendiri :-)
jfpoilpret
1
Hampir selalu Swing vs. SWT (setidaknya untuk saya), untuk perbandingan kecil Anda dapat memeriksa Apa hal utama yang harus diperhatikan oleh programmer Java SWT saat pindah ke Swing? ..
Sorceror
2
JavaFX tidak lagi menjadi bagian dari SDK pratinjau dan tersedia untuk penggunaan Produksi. perbarui posting ini.

Jawaban:

79

Pohon keputusan:

  1. Kerangka kerja seperti Qt dan SWT membutuhkan DLL asli. Jadi, Anda harus bertanya pada diri sendiri: Apakah semua platform yang diperlukan didukung? Bisakah Anda mengemas DLL asli dengan aplikasi Anda?

    Lihat di sini, bagaimana melakukan ini untuk SWT .

    Jika Anda punya pilihan di sini, Anda harus memilih Qt daripada SWT. Qt telah dikembangkan oleh orang-orang yang memahami UI dan desktop sementara SWT telah dikembangkan karena kebutuhan untuk membuat Eclipse lebih cepat. Ini lebih merupakan kinerja patch untuk Java 1.4 daripada framework UI. Tanpa JFace, Anda kehilangan banyak komponen UI utama atau fitur yang sangat penting dari komponen UI (seperti pemfilteran pada tabel).

    Jika SWT tidak memiliki fitur yang Anda butuhkan, kerangka kerja agak memusuhi untuk memperluasnya. Misalnya, Anda tidak dapat memperluas kelas apa pun di dalamnya (kelas tidak final, mereka hanya melempar pengecualian ketika paket this.getClass()tidak org.eclipse.swtdan Anda tidak dapat menambahkan kelas baru dalam paket itu karena ditandatangani).

  2. Jika Anda membutuhkan solusi Java asli dan murni, yang akan meninggalkan Anda. Mari kita mulai dengan AWT, Swing, SwingX - the Swing way.

    AWT sudah usang. Swing sudah ketinggalan zaman (mungkin kurang begitu tetapi tidak banyak pekerjaan yang telah dilakukan pada Swing selama 10 tahun terakhir). Anda bisa berargumen bahwa Swing itu baik untuk memulai, tetapi kita semua tahu kode itu membusuk. Dan itu terutama berlaku untuk UI hari ini.

    Itu membuat Anda dengan SwingX. Setelah periode lambat dari kemajuan yang lambat, pembangunan telah mengambil kembali . Kelemahan utama dengan Swing adalah bahwa itu bergantung pada beberapa ide lama yang sangat baik pendarahan 15 tahun yang lalu tetapi yang merasa "canggung" hari ini. Misalnya, tampilan tabel mendukung penyaringan dan penyortiran tetapi Anda masih harus mengonfigurasi ini. Anda harus menulis banyak kode pelat ketel hanya untuk mendapatkan UI yang layak yang terasa modern.

    Area lemah lainnya adalah tema. Sampai hari ini, ada banyak tema di sekitar. Lihat di sini untuk 10 besar . Tetapi ada yang lambat, ada yang buggy, ada juga yang tidak lengkap. Saya benci ketika saya menulis UI dan pengguna mengeluh bahwa ada sesuatu yang tidak berfungsi untuk mereka karena mereka memilih tema yang aneh.

  3. JGoodies adalah lapisan lain di atas Swing, seperti SwingX. Mencoba membuat Swing lebih menyenangkan untuk digunakan. Situs web tampak hebat. Mari kita simak tutorialnya ... hm ... masih mencari ... tunggu sebentar. Tampaknya tidak ada dokumentasi di situs web sama sekali. Google untuk menyelamatkan . Tidak, tidak ada tutorial yang berguna sama sekali.

    Saya tidak merasa percaya diri dengan kerangka kerja UI yang berusaha keras untuk menyembunyikan dokumentasi dari penggemar baru yang potensial. Itu tidak berarti JGoodies itu buruk; Aku hanya tidak bisa menemukan sesuatu yang baik untuk dikatakan tentang itu tetapi itu terlihat bagus.

  4. JavaFX. Hebat, bergaya. Dukungan ada di sana tetapi saya merasa itu lebih dari mainan mengkilap daripada kerangka UI yang serius. Perasaan ini berakar pada kurangnya komponen UI yang kompleks seperti tabel pohon. Ada komponen berbasis webkit untuk menampilkan HTML .

    Ketika diperkenalkan, pikiran pertama saya adalah "terlambat lima tahun." Jika tujuan Anda adalah aplikasi yang bagus untuk ponsel atau situs web, bagus. Jika tujuan Anda adalah aplikasi desktop profesional, pastikan itu memberikan apa yang Anda butuhkan.

  5. Poros. Pertama kali saya mendengarnya. Ini pada dasarnya kerangka kerja UI baru berdasarkan Java2D. Jadi saya mencobanya kemarin. Tanpa Swing, hanya sedikit AWT ( new Font(...)).

    Kesan pertama saya bagus. Ada dokumentasi luas yang membantu Anda memulai. Sebagian besar contoh disertai dengan demo langsung (Catatan: Anda harus mengaktifkan Java di browser web Anda; ini merupakan risiko keamanan ) di halaman web, sehingga Anda dapat melihat kode dan aplikasi yang dihasilkan secara berdampingan.

    Dalam pengalaman saya, lebih banyak upaya masuk ke dalam kode daripada ke dokumentasi. Dengan melihat dokumen Pivot, banyak upaya harus dilakukan ke dalam kode. Perhatikan bahwa saat ini ada bug yang mencegah beberapa contoh berfungsi ( PIVOT-858 ) di browser Anda.

    Kesan kedua saya tentang Pivot adalah mudah digunakan. Ketika saya mengalami masalah, saya biasanya bisa menyelesaikannya dengan cepat dengan melihat contoh. Saya kehilangan referensi dari semua style yang didukung oleh masing-masing komponen.

    Seperti JavaFX, itu kehilangan beberapa komponen tingkat yang lebih tinggi seperti komponen tabel pohon ( PIVOT-306 ). Saya tidak mencoba memuat malas dengan tampilan tabel. Kesan saya adalah bahwa jika model yang mendasarinya menggunakan pemuatan malas, maka itu sudah cukup.

    Menjanjikan. Jika Anda bisa, cobalah.

Aaron Digulla
sumber
Mencoba Pivot demo "Kitchen sink", setelah membuka beberapa grup ia terus memakan CPU secara keseluruhan. Jika itu karena desain Pivot, maka saya pasti tidak menginginkannya di proyek saya.
Nama Tampilan
Sepertinya saya sudah menemukan sumber masalahnya dan diperbaiki di versi yang lebih baru: apache-pivot-users.399431.n3.nabble.com/…
Nama Tampilan
2
JavaFX 8 (untuk Java 8 dan di atasnya) memiliki widget TreeTableView. Namun, JavaFX 2.2 (untuk Java 7) tidak memiliki ini, dan juga tidak memiliki standar kesalahan dan info dialgos: lihat stackoverflow.com/a/12760202/105137 . Juga perpustakaan widget ControlsFX hanya tersedia untuk Java 8: fxexperience.com/controlsfx
kostmo
12

SWT dengan sendirinya cukup rendah, dan menggunakan widget asli platform melalui JNI. Ini tidak terkait dengan Swing dan AWT sama sekali. The Eclipse IDE dan semua berbasis Eclipse Aplikasi Client Kaya, seperti klien Vuze BitTorrent , yang dibangun menggunakan SWT. Juga, jika Anda mengembangkan plugin Eclipse, Anda biasanya akan menggunakan SWT.
Saya telah mengembangkan aplikasi dan plugin berbasis Eclipse selama hampir 5 tahun sekarang, jadi saya jelas bias. Namun, saya juga memiliki pengalaman luas dalam bekerja dengan SWT dan toolkit JFace UI, yang dibangun di atasnya. Saya menemukan JFace sangat kaya dan kuat; dalam beberapa kasus bahkan mungkin menjadi alasan utama untuk memilih SWT. Ini memungkinkan Anda untuk menyiapkan UI yang berfungsi dengan cukup cepat, asalkan itu seperti IDE (dengan tabel, pohon, kontrol asli, dll). Tentu saja Anda dapat mengintegrasikan kontrol kustom Anda juga, tetapi itu membutuhkan usaha ekstra.

Zsolt Török
sumber
Menurut Anda, apakah komponen lanjutan seperti TreeTable dengan penyortiran kolom dan penyaringan menjadi masalah besar dengan SWT + JFace?
netbrain
@netbrain: Saya telah melakukan itu berkali-kali, cukup mudah dengan JFace. Inilah yang saya maksud dengan antarmuka "seperti IDE", mungkin bukan pilihan kata yang terbaik.
Zsolt Török
9

Saya ingin menyarankan kerangka kerja lain: Apache Pivot http://pivot.apache.org/ .

Saya mencobanya secara singkat dan terkesan dengan apa yang ditawarkan sebagai kerangka kerja RIA (Aplikasi Internet Kaya) ala Flash.

Ini membuat UI menggunakan Java2D, sehingga meminimalkan dampak (IMO, kembung) warisan Swing dan AWT.

Augustus Thoo
sumber
1
Saya mendapat kesan bahwa netbrain bertanya tentang aplikasi desktop. Untuk kerangka kerja RIA, pertimbangkan juga GWT dan Vaadin. Kerangka kerja ini memungkinkan Anda untuk menulis di Jawa, kompilasi dan mendapatkan JavaScript yang berjalan dengan sangat baik di semua browser web umum.
Costis Aivalis
tidak dapatkah pivot diterapkan untuk aplikasi desktop?
netbrain
Mungkin itu masalah definisi, tetapi kerangka kerja RIA pada dasarnya dirancang untuk berjalan di browser.
Costis Aivalis
2
@netbrain: Ya, Anda bisa menjalankan Pivot sebagai aplikasi desktop (JFrame) atau applet (JApplet).
Augustus Thoo
9

Swing + SwingX + Miglayout adalah kombinasi pilihan saya. Miglayout jauh lebih sederhana daripada Swings yang dirasakan oleh 200 manajer tata letak yang berbeda dan jauh lebih kuat. Selain itu, ini memberi Anda kemampuan untuk "debug" tata letak Anda, yang sangat berguna saat membuat tata letak yang kompleks.

metode helpermet
sumber
8

Pilihan lain adalah menggunakan Qt Jambi . Ia memiliki hampir semua kehebatan Qt (banyak komponen, dokumentasi yang baik, mudah digunakan), tanpa kerumitan C ++. Saya menggunakannya 3-4 tahun yang lalu untuk proyek kecil, bahkan saat itu sudah hampir matang.

Anda mungkin ingin melihat diskusi tentang Swing vs. Qt di sini .

nimcap
sumber
5

Pendapat pribadi saya: Go for Swing bersama dengan platform NetBeans.

Jika Anda memerlukan komponen canggih (lebih dari yang ditawarkan NetBeans), Anda dapat dengan mudah mengintegrasikan SwingX tanpa masalah (atau JGoodies) karena platform NetBeans sepenuhnya didasarkan pada Swing.

Saya tidak akan memulai aplikasi desktop besar (atau yang akan menjadi besar) tanpa platform yang baik yang dibangun di atas kerangka UI yang mendasarinya.

Opsi lainnya adalah SWT bersama dengan Eclipse RCP, tetapi lebih sulit (meskipun bukan tidak mungkin) untuk mengintegrasikan komponen Swing "murni" ke dalam aplikasi semacam itu.

Kurva pembelajaran agak curam untuk platform NetBeans (meskipun saya rasa itu juga berlaku untuk Eclipse), tetapi ada beberapa buku bagus yang akan sangat saya rekomendasikan.

seekor kuda tanpa nama
sumber
1
Perhatikan bahwa SwingX adalah komponen (AFAIU) yang merupakan ekstensi atau komposisi dari komponen Swing yang ada. JGoodies OTOH adalah tentang PLAF dan tata letak. Namun seperti yang Anda katakan, keduanya akan berintegrasi mulus dengan Swing.
Andrew Thompson
1
+1 Berbasiskan pengembangan Anda pada Swing. Ayunan dibangun di atas AWT dan mencakup komponen ringan yang terlihat dan berperilaku sama pada semua platform, sehingga Anda tidak harus menggunakan komponen AWT secara langsung. Ada sejumlah besar Beans unggul yang bisa Anda tambahkan dengan mudah ke GUI pengembangan Anda seperti JCalendar toedter.com.
Costis Aivalis
1
@Andrew selain PLAF dan tata letak, JGoodies menawarkan lebih banyak: pengikatan kacang (untuk pola model presentasi), validasi, dan kerangka kerja "JSR-296 like" (yang komersial).
jfpoilpret
3

Anda lupa untuk Java Desktop Aplication berdasarkan JSR296 sebagai Swing Framework bawaan di NetBeans

tidak termasuk AWT dan JavaFX semua kerangka kerja Anda desribed didasarkan pada Swing, jika Anda akan mulai dengan Swing maka Anda akan mengerti (jelas) untuk semua ini (Kerangka Berbasis Berdasarkan)

ATW, SWT (Eclipse), Aplikasi Java Desktop (Netbeans), SwingX, JGoodies

semua kerangka kerja di sana (saya tidak tahu sesuatu tentang JGoodies) termasuk. JavaFX belum lama mengalami kemajuan, banyak Kerangka Berbasis Swing dihentikan, jika tidak maka tanpa versi terbaru

hanya pandangan saya - yang terbaik dari mereka adalah SwingX, tetapi membutuhkan pengetahuan terdalam tentang Swing,

Lihat dan Rasakan Kerangka Berbasis Swing

mKorbel
sumber
bagian dari mereka pada Komponen AWT, sebagian pada Swing JCompoentns, tetapi antara AWT dan Swing berbeda dengan metode yang diterapkan, dapat diakses dan diwariskan, misalnya Swing JComponents secara langsung (API) mengimplementasikan banyak metode inherit atau bersarang langsung dari AWT :-)
mKorbel
JSR296 sudah mati. Itu tidak lagi "dipertahankan" dan dukungan untuk itu telah dihapus dari NetBeans. (Dan itu tidak pernah merupakan kerangka kerja yang benar-benar bagus untuk memulai)
a_horse_with_no_name
@a_horse_with_no_name tepat with same progressdi SWT, SwingX, pemilik baru, maniers baru
mKorbel
1
SWT, yang dikembangkan oleh IBM, tidak didasarkan pada Swing, ini adalah teknologi yang bersaing. Ayunan menggunakan AWT. JavaFX juga tidak didasarkan pada Swing. Ini adalah kerangka kerja yang sama sekali baru. Beberapa menyebutnya penerus Swing, tetapi masih terlalu muda untuk menyebut pertempuran itu. Saya membuat keputusan yang sama persis saat ini, dan Swing adalah kandidat saya, hanya untuk fakta bahwa itu adalah pilihan yang paling matang, namun realistis yang tersedia.
Gordon
1
SwingX adalah ekstensi untuk Swing (itulah sebabnya ia membutuhkan pengetahuan Swing), pada kenyataannya, beberapa fitur SwingX telah dimasukkan ke dalam Swing itu sendiri.
Gordon
3

Saya sudah cukup senang dengan Swing untuk aplikasi desktop yang pernah saya ikuti. Namun, saya membagikan pandangan Anda tentang Swing tanpa menawarkan komponen canggih. Apa yang telah saya lakukan dalam kasus ini adalah pergi untuk JIDE. Ini tidak gratis, tetapi tidak terlalu mahal dan memberi Anda lebih banyak alat di bawah ikat pinggang Anda. Secara khusus, mereka menawarkan TreeTable yang dapat disaring.

sbrattla
sumber
Senang mendengarnya! Jadi JIDE telah membuat komponen mereka sendiri berdasarkan Swing ...
netbrain
Ya, JIDE telah membuat beberapa komponen yang mencakup kisi-kisi, pohon, tabel, grafik dan sejenisnya. Seperti saya katakan, itu tidak gratis tetapi mengingat waktu yang dibutuhkan untuk membuat hal-hal ini sendiri, Anda mungkin lebih baik menggunakan sesuatu yang sudah dibuat. Selain itu, sejauh yang saya mengerti, JIDE fleksibel dalam hal membiarkan proyek open source menggunakan komponen mereka sebagai imbalan untuk tautan ke situs web mereka atau logo dalam dialog 'Tentang'.
sbrattla
3

Saya akan pergi dengan Swing. Untuk tata letak saya akan menggunakan tata letak formulir JGoodies. Layak mempelajari kertas putih pada Layout Formulir di sini - http://www.jgoodies.com/freeware/forms/

Juga jika Anda akan mulai mengembangkan aplikasi desktop besar, Anda pasti akan membutuhkan kerangka kerja. Orang lain telah menunjukkan kerangka kerja netbeans. Saya tidak begitu suka jadi menulis yang baru yang sekarang kita gunakan di perusahaan saya. Saya telah meletakkannya di sourceforge, tetapi tidak menemukan waktu untuk mendokumentasikannya. Berikut tautan untuk menelusuri kode:

http://swingobj.svn.sourceforge.net/viewvc/swingobj/

Showcase seharusnya menunjukkan kepada Anda bagaimana melakukan login sederhana sebenarnya ..

Beritahu saya jika ada pertanyaan, saya bisa membantu.

sethu
sumber