GUI Java (AWT, SWT dan Swing)
Swing Java utama GUI widget toolkit. Ini adalah bagian dari Oracle Yayasan Kelas Jawa (JFC) - API untuk menyediakan antarmuka pengguna grafis (GUI) untuk program Java.Ayunan dikembangkan untuk menyediakan satu set yang lebih canggih dari komponen GUI dari Toolkit Jendela sebelumnya Abstrak (AWT). Ayunan memberikan tampilan asli dan merasa bahwa mengemulasi tampilan dan nuansa dari beberapa platform, dan juga mendukung tampilan yang pluggable dan nuansa yang memungkinkan aplikasi untuk melihat dan merasa tidak berhubungan dengan platform yang mendasari. Ini memiliki lebih kuat dan fleksibel daripada komponen AWT. Selain komponen akrab seperti tombol, kotak centang dan label, Swing menyediakan komponen canggih seperti beberapa tab panel, panel gulir, pohon, tabel dan daftar.
Tidak seperti komponen AWT, Swing komponen tidak diimplementasikan dengan platform kode khusus. Sebaliknya mereka ditulis seluruhnya di Jawa dan karena itu adalah platform-independen. Istilah "ringan" digunakan untuk menggambarkan elemen seperti itu.Sejarah
The Foundation Classes Internet (IFC) adalah sebuah perpustakaan grafis untuk Java awalnya dikembangkan oleh Netscape Communications Corporation dan pertama kali dirilis pada tanggal 16 Desember 1996. Pada tanggal 2 April 1997, Sun Microsystems dan Netscape Communications Corporation mengumumkan niat mereka untuk memasukkan IFC dengan teknologi lainnya untuk membentuk Yayasan Jawa Kelas. "Java Yayasan Kelas" yang kemudian berganti nama menjadi "Swing".
Swing memperkenalkan mekanisme yang memungkinkan tampilan dan nuansa dari setiap komponen dalam aplikasi harus diubah tanpa membuat perubahan besar pada kode aplikasi. Pengenalan dukungan untuk pluggable melihat dan merasakan memungkinkan komponen Swing untuk meniru penampilan komponen asli, namun tetap menyimpannya manfaat dari platform kemerdekaan. Awalnya didistribusikan sebagai perpustakaan terpisah download, Swing telah dimasukkan sebagai bagian dari Java Standard Edition sejak rilis 1,2 . Kelas Swing dan komponen yang terkandung dalam hirarki paket javax.swing.Arsitektur swing
Swing adalah platform-independen, Model-View-Controller GUI framework untuk Java. Ini mengikuti model pemrograman single-threaded.Yayasan
Swing adalah platform-independen karena benar-benar ditulis di Jawa. Dokumentasi lengkap untuk semua kelas swing dapat ditemukan di Java API Guide. Extensible
Swing adalah arsitektur yang sangat modular, yang memungkinkan untuk "plugging" implementasi kustom berbagai antarmuka kerangka tertentu: Pengguna dapat menyediakan implementasi adat mereka sendiri (s) dari komponen ini untuk menimpa implementasi default menggunakan mekanisme warisan Jawa.
;/span>Swing adalah kerangka kerja berbasis komponen. Perbedaan dan komponen adalah titik yang cukup halus: ringkas, komponen Swing kelas keturunan javax.swing.JComponent kelas. Ayunan objek asynchronous peristiwa kebakaran, telah "terikat" properti, dan menanggapi satu set didokumentasikan metode khusus untuk komponen. Komponen Swing adalah komponen Java Beans, kompatibel dengan spesifikasi Komponen Beans Arsitektur Jawa.Customizable
Mengingat rendering model program dari kontrol swing framework, baik atas rincian rendering dari komponen mungkin dalam Swing. Sebagai pola umum, representasi visual dari komponen Swing adalah komposisi satu set standar elemen, seperti "perbatasan", "inset", dekorasi, dan properti lainnya. Biasanya, pengguna pemrograman akan menyesuaikan komponen swing standar (seperti JTable) dengan menetapkan Borders tertentu, Warna, latar belakang, kekeruhan, dll, untuk komponen tersebut. Komponen inti kemudian akan menggunakan properti ini untuk membuat sendiri. Namun, juga sepenuhnya mungkin untuk menciptakan kontrol GUI yang unik dengan representasi visual sangat disesuaikan.Dikonfigurasi
Ketergantungan Swing pada mekanisme waktu berjalan dan pola komposisi tidak langsung memungkinkan untuk merespon pada waktu berjalan perubahan mendasar dalam pengaturannya. Misalnya, aplikasi Swing berbasis dapat mengubah tampilan dan nuansa pada waktu berjalan. Selanjutnya, pengguna dapat memberikan tampilan mereka sendiri dan merasa implementasi, yang memungkinkan untuk perubahan seragam dalam tampilan dan nuansa dari aplikasi Swing yang ada tanpa ada perubahan program ke kode aplikasi.
Ringan UI
Tingkat tinggi Swing fleksibilitas adalah hasil dari pilihan untuk tidak menggunakan GUI kontrol host asli OS untuk menampilkan sendiri. Ayunkan "cat" kontrol dengan menggunakan Java 2D API, daripada memanggil toolkit antarmuka pengguna asli. Dengan demikian, komponen swing tidak memiliki asli sesuai OS komponen GUI, dan bebas untuk membuat sendiri dengan cara apapun yang mungkin dengan API grafis yang mendasarinya.
Namun, pada intinya, setiap komponen swing bergantung pada wadah AWT, karena (Swing) JComponent meluas (s AWT) Container. Hal ini memungkinkan Swing untuk plug ke kerangka kerja manajemen GUI host OS, termasuk perangkat / layar pemetaan penting dan interaksi pengguna, seperti penekanan tombol atau pergerakan mouse. Ayunkan hanya "Transpos" sendiri (OS agnostik) semantik atas (OS spesifik) komponen yang mendasarinya. Jadi, misalnya, setiap komponen swing melukis rendition pada perangkat grafis dalam menanggapi panggilan untuk component.paint (), yang didefinisikan dalam (AWT) Container. Tapi tidak seperti komponen AWT, yang didelegasikan lukisan untuk OS-ibu mereka widget "kelas berat", komponen Swing bertanggung jawab untuk rendering mereka sendiri.
Ini transposisi dan decoupling bukan hanya visual, dan meluas ke manajemen Swing dan aplikasi sendiri OS-independen semantik untuk acara dipecat dalam hirarki penahanan yang komponen. Secara umum, delegasi swing Arsitektur tugas memetakan berbagai rasa dari semantik OS GUI ke sebuah sederhana, tetapi umum, pola untuk wadah AWT. Membangun bahwa platform umum, ia menetapkan semantik sendiri GUI kaya dan kompleks dalam bentuk model JComponent.Longgar-Ditambah dan MVC
Perpustakaan swing membuat berat penggunaan pola desain Model / View / Controller perangkat lunak,yang konseptual decouples data yang dilihat dari antarmuka pengguna kontrol melalui yang dilihat. Karena itu, komponen Swing kebanyakan terkait model (yang ditentukan dalam hal interface Jawa), dan programmer dapat menggunakan berbagai implementasi default atau memberikan mereka sendiri. Kerangka kerja ini menyediakan implementasi default interface model untuk semua komponen konkret. Penggunaan khas kerangka swing tidak memerlukan penciptaan model kustom, sebagai kerangka menyediakan satu set implementasi default yang transparan, secara default, yang berhubungan dengan kelas anak JComponent yang sesuai pada perpustakaan Swing. Secara umum, hanya komponen yang kompleks, seperti tabel, pohon dan kadang-kadang daftar, mungkin memerlukan implementasi model kustom sekitar spesifik aplikasi struktur data. Untuk mendapatkan rasa yang baik potensi bahwa arsitektur swing memungkinkan, pertimbangkan situasi hipotetis di mana model kustom untuk tabel dan daftar adalah pembungkus lebih DAO dan / atau jasa EJB ..
Biasanya, objek komponen swing model yang bertanggung jawab untuk menyediakan antarmuka yang ringkas kejadian terdefinisi dipecat, dan properti diakses untuk model data (konseptual) untuk digunakan oleh JComponent terkait. Mengingat bahwa pola MVC secara keseluruhan adalah pola hubungan objek loosely-coupled kolaboratif, model menyediakan sarana programatik untuk melampirkan pendengar acara ke objek model data. Biasanya, acara ini adalah model sentris (ex: sebuah "baris dimasukkan" acara dalam model tabel) dan dipetakan oleh spesialisasi JComponent menjadi peristiwa bermakna untuk komponen GUI.
Sebagai contoh, JTable memiliki model yang disebut TableModel yang menggambarkan sebuah antarmuka untuk bagaimana tabel akan mengakses data tabular. Sebuah implementasi standar ini beroperasi pada array dua dimensi.
Komponen pandangan Swing JComponent adalah objek yang digunakan untuk grafis "mewakili" kontrol GUI konseptual. Perbedaan dari Swing, sebagai kerangka kerja GUI, adalah ketergantungan pada kontrol GUI pemrograman-diberikan (sebagai lawan dari penggunaan kontrol host asli OS GUI). Sebelum Java 6 Update 10, perbedaan ini menjadi sumber komplikasi saat pencampuran kontrol AWT, yang menggunakan kontrol asli, dengan kontrol swing dalam GUI (lihat Mencampur komponen AWT dan Swing).
Akhirnya, dalam hal komposisi visual dan manajemen, Swing nikmat layout relatif (yang menentukan hubungan posisional antara komponen) yang bertentangan dengan layout mutlak (yang menentukan lokasi yang tepat dan ukuran komponen). Ini bias terhadap "cairan" 'pemesanan visual adalah karena asal-usul dalam lingkungan operasi applet yang membingkai desain dan pengembangan GUI toolkit Jawa asli. (Konseptual, pandangan tentang manajemen tata letak sangat mirip dengan yang menginformasikan rendering konten HTML di browser, dan alamat set yang sama kekhawatiran yang memotivasi mantan.)
Hubungan dengan AWTAWT dan hirarki kelas swing
Sejak versi awal Java, sebagian dari Toolkit Jendela Abstrak (AWT) telah menyediakan platform-independen API untuk komponen antarmuka pengguna. Dalam AWT, setiap komponen diberikan dan dikontrol oleh komponen rekan asli khusus untuk sistem windowing yang mendasarinya.
Sebaliknya, komponen Swing sering digambarkan sebagai ringan karena mereka tidak memerlukan alokasi sumber daya asli di windowing toolkit sistem operasi. Komponen AWT disebut sebagai komponen kelas berat.
Sebagian besar API swing umumnya merupakan pelengkap dari ekstensi AWT, bukan pengganti langsung. Bahkan, setiap antarmuka swing ringan akhirnya ada dalam komponen AWT kelas berat karena semua top-level komponen di Swing (JApplet, JDialog, JFrame, dan JWindow) memperpanjang wadah tingkat atas AWT. Sebelum Java 6 Update 10, penggunaan komponen baik ringan dan kelas berat dalam jendela yang sama pada umumnya berkecil hati karena Z-order yang tidak kompatibel. Namun, kemudian versi Jawa telah tetap masalah ini, dan kedua Swing dan komponen AWT sekarang dapat digunakan dalam satu GUI tanpa Z-order isu.
Rendering fungsionalitas inti yang digunakan oleh Ayunkan untuk menarik komponen ringan disediakan oleh Java 2D, bagian lain dari JFC.Hubungan dengan SWT
Widget Standar Toolkit (SWT) adalah toolkit bersaing awalnya dikembangkan oleh IBM dan sekarang dikelola oleh komunitas Eclipse. Pelaksanaan SWT memiliki lebih banyak kesamaan dengan komponen kelas berat dari AWT. Ini menganugerahkan manfaat seperti kesetiaan lebih akurat dengan windowing toolkit yang mendasari asli, pada biaya terhadap eksposur meningkat menjadi platform asli dalam model pemrograman.
Munculnya SWT telah menimbulkan banyak perpecahan di antara pengembang Java desktop, dengan banyak sangat menguntungkan baik SWT atau Swing.
Ada perdebatan yang signifikan dan spekulasi tentang kinerja SWT vs swing, beberapa mengisyaratkan bahwa ketergantungan berat SWT pada JNI akan membuatnya lebih lambat bila komponen GUI dan Jawa perlu berkomunikasi data, tapi lebih cepat di render ketika data model di-load ke dalam GUI, namun hal ini belum dikonfirmasi dengan cara baik. [4] Satu set cukup menyeluruh dari benchmark tahun 2005 menyimpulkan bahwa baik swing atau SWT jelas mengungguli yang lain dalam kasus umum. [5]
SWT dianggap oleh beberapa menjadi kurang efektif sebagai teknologi untuk cross-platform pengembangan [siapa?]. Dengan menggunakan fitur tingkat tinggi dari masing-masing toolkit windowing asli, mereka mengklaim bahwa SWT kembali ke masalah terlihat pada pertengahan tahun 1990 (dengan toolkit seperti Zapp, Seng, XVT dan IBM / Smalltalk) di mana toolkit berusaha untuk menutupi perbedaan perilaku fokus, peristiwa yang memicu dan tata letak grafis [kutipan diperlukan]. Kegagalan untuk mencocokkan perilaku pada setiap platform dapat menyebabkan halus namun sulit-untuk-mengatasi bug yang mempengaruhi interaksi pengguna dan munculnya GUI.
Berikut ini adalah program Swing berbasis agak sederhana. Ini menampilkan jendela (sebuah JFrame) yang berisi label dan tombol.
Perhatikan bagaimana semua Instansiasi dan penanganan semua komponen Swing dilakukan pada Thread Dispatch Acara oleh penggunaan EventQueue.invokeLater metode (Runnable)) pada sebuah instance dari kelas, yaitu kelas Runnable, diciptakan dalam metode utama (lihat Swing dan benang pengaman).