Haruskah kita menggunakan FXML di kontrol khusus JavaFX atau tidak?

Tampaknya sudah jelas untuk menanyakan hal ini, menurut saya menggunakan FXML untuk menulis komponen khusus kami jelas merupakan cara yang tepat.

Namun seperti yang dapat kita lihat dari ControlsFX, JFXextras dan bahkan buku 'Menguasai Kontrol JavaFX8 tidak menggunakan atau menyebutkan penggunaan FXML dalam kontrol khusus.

Meskipun demikian, dokumentasi resmi mengatakan untuk mengikuti rute itu, dan membuat kontrol JavaFX melalui FXML.

Apa cara yang lebih benar dan mengapa?


person David Limkys    schedule 17.11.2014    source sumber


Jawaban (2)


Ada dua jenis kontrol khusus di JavaFX:

  • fx:kontrol khusus berbasis root: Kontrol khusus ini dapat diatur gayanya (mendukung CSS), namun tidak bisa dikuliti.

    Jika Anda seorang pengembang aplikasi, inilah yang paling ingin Anda gunakan.

    Kontrol semacam ini biasanya spesifik untuk aplikasi atau organisasi. Skin khusus tambahan untuk kontrol ini tidak diperlukan, CSS saja sudah cukup.

    Biasanya mereka hanya mengelompokkan beberapa kontrol dan menyediakan API yang lebih bagus serta menyembunyikan bagian dalamnya.

    Mereka jauh lebih mudah untuk ditulis daripada kontrol khusus yang dapat di-skinnable.

    Saya memikirkan ini sebagai alternatif dari subkelas JPanel di dunia Swing.

    Saya menyarankan untuk memecah GUI Anda menjadi kontrol berbasis fx:root kecil yang mandiri (kohesi tinggi, kopling rendah). Gunakan Pola Mediator untuk menggabungkan kontrol-kontrol ini (kontrol induk mengelola/mengonfigurasi kontrol anak dan mendengarkan kejadian pada kontrol anak. Kontrol anak tidak mengetahui satu sama lain).

    Anda dapat membuat seluruh hierarki kontrol tersebut. Memecahnya menjadi kontrol-kontrol kecil akan membuat pemeliharaan lebih mudah (misalnya jika tata letak atau interaksi pengguna harus diubah).

  • kontrol kustom yang dapat diubah: kontrol kustom yang dapat diubah tidak hanya dapat ditata (melalui CSS) namun tampilan dan nuansanya dapat diubah sepenuhnya dengan menyediakan skin kustom.

    Jika Anda adalah pengembang pustaka kontrol, kemungkinan besar Anda ingin menyediakan kontrol kustom yang dapat diubah tampilannya agar pengguna pustaka bisa mendapatkan hasil maksimal dari JavaFX.

    Kontrol semacam ini biasanya merupakan kontrol yang sangat mendasar, sangat dapat digunakan kembali, dan sering kali (tetapi tidak selalu) menggunakan beberapa lukisan khusus juga.

    Mereka lebih sulit untuk dilakukan dengan benar daripada kontrol khusus berbasis fx:root.

person Puce    schedule 18.11.2014
comment
Jawaban yang bagus. Perhatikan bahwa dengan kontrol berbasis fx:root, kontrol Anda harus mengekspos daftar node anak yang dapat dimodifikasi (misalnya menjadi subkelas Pane), yang merupakan salah satu aspek yang membuatnya tidak cocok untuk pengembangan perpustakaan. Kontrol kustom yang dapat di-skinnable dapat menjadi subkelas dari Control, sehingga elemen yang membentuk kontrol tidak dapat ditambahkan atau dihapus oleh pengguna akhir, dan seperti yang Anda tunjukkan, elemen tersebut sesuai dengan tempat aslinya dalam hierarki API. - person James_D; 18.11.2014
comment
Oracle memilih untuk menggunakan (terutama) pendekatan fx:root saat membuat SceneBuilder, sehingga Anda dapat pelajari kode sumber SceneBuilder untuk contoh nyata yang digunakan dalam kode aplikasi kualitas produksi. - person jewelsea; 18.11.2014

Tidak ada cara yang benar. Tapi kita bisa membaginya menjadi ini:

Apakah Anda mengetahui jumlah elemen JavaFX yang akan ditampilkan sebelum aplikasi Anda dimulai? Jika ya, Anda dapat membangun GUI Anda dengan SceneBuilder atau langsung dalam XML dengan menulis File FXML. Hal ini berlaku untuk sebagian besar pengaturan layar GUI di mana tata letak keseluruhan (MenuBar, ToolBar, konten, sidebar, ...) diketahui dengan baik dan tidak berubah seiring waktu.

Sekarang, komponen khusus tidak tahu cara menampilkan dirinya sendiri. Ada banyak opsi yang dapat disesuaikan dan sebagian besar komponen khusus dibuat secara dinamis atau dapat berubah secara drastis saat pengguna mengubah opsi ini. Anda tidak dapat menulis satu file FXML tetapi harus menulis banyak file tunggal, masing-masing akan membuat sebagian kecil dari komponen khusus. Ini tidak terlalu mudah untuk dikelola, jadi sebagian besar pengembang memilih untuk melakukannya tanpa FXML, langsung dalam kode.

Dan yang lebih penting lagi: Ada banyak komponen khusus yang menggunakan tata letak khusus yang tidak ada di dalam JavaFX, untuk mencapainya Anda harus menulis wadah Anda sendiri dan menyambungkannya dengan komponen khusus untuk mendapatkan hasil yang sempurna. Pada akhirnya, komponen khusus dibuat (atau lebih baik: harus dibuat) untuk digunakan di dalam FXML/SceneBuilder.

person eckig    schedule 18.11.2014