Sebagian besar aplikasi Java tidak terlihat sama dengan aplikasi C / C ++. Ayunan mungkin telah dirancang dengan sengaja untuk memiliki tampilan yang khas, tetapi berdasarkan apa yang telah saya baca, SWT misalnya mencoba untuk 'terlihat asli', dan tidak sepenuhnya berhasil.
Pertanyaanku adalah:
Mengapa sulit bagi pengembang bahasa Jawa untuk merancang sistem GUI yang persis meniru tampilan GUI asli? Apa yang berbeda dalam GUI asli? Bukankah ini hanya masalah mendesain tombol yang terlihat seperti tombol 'asli'? Atau apakah itu lebih dalam dari itu?
Jawaban:
Nah - semacam, untuk tombol. Tetapi ini mungkin lebih sulit dari yang Anda bayangkan. Saat ini grafik yang digunakan untuk merepresentasikan komponen GUI tidak sesederhana bitmap acak yang diregangkan (karena ini tidak berskala sangat baik) - grafis berbasis vektor dengan banyak kasus sudut diprogram ke dalamnya ( jadi ketika tombol mencapai tepi layar, itu mungkin terlihat sedikit berbeda, misalnya.) Dan tentu saja, Anda akan memerlukan grafik yang berbeda ketika sebuah tombol diklik. Untuk alasan hak cipta, pengembang sering tidak dapat hanya menggunakan grafik yang ada ini secara langsung, sehingga harus dibuat ulang - dan walaupun mereka melakukan pekerjaan yang baik untuk sebagian besar, pasti ada beberapa hal yang terlewatkan mengingat banyaknya komponen grafis di luar sana.
Saya mengatakan semua hal di atas berdasarkan Swing, yang tentu saja merupakan toolkit GUI non-pribumi yang ringan. Anda secara khusus menyebutkan SWT tidak mencari asli, yang agak aneh, karena SWT asli. Ini adalah toolkit yang menggunakan JNI di bawahnya untuk memanggil komponen asli - jadi jika sesuatu tidak terlihat di sana, itu tidak akan terjadi karena tampilan dan nuansa.
sumber
Ada setengah lusin toolkit yang dapat dianggap "asli" pada beberapa sistem. Beberapa di antaranya memiliki konsep atau kemampuan yang agak unik, dan mereplikasi mereka dalam toolkit lintas platform sangat membosankan. Tampilan & nuansa aplikasi tidak hanya ditentukan oleh "kulit", tetapi juga pada tata letak dan bagaimana perilakunya. Beberapa pertimbangan:
Masalah-masalah ini tidak dapat diselesaikan melalui stylesheet sederhana ketika mereka menyentuh perilaku atau tata letak umum aplikasi. Satu-satunya solusi nyata adalah menulis ulang aplikasi untuk setiap sistem (sehingga mengabaikan manfaat lintas platform Java). Satu-satunya solusi realistis adalah melupakan tata letak tepat-pixel, dan menulis ke antarmuka umum yang abstrak di atas toolkit khusus sistem. Solusi yang diambil oleh Swing adalah meniru berbagai sistem, yang gagal secara spektakuler.
Dan kemudian ada konsistensi lintas-platform, gagasan bahwa aplikasi Anda dapat terlihat persis sama pada semua sistem (sering dipilih oleh gim, di mana ini meningkatkan perendaman). Pada aplikasi desktop, ini hanya mengganggu dan menghancurkan harapan pengguna.
sumber
Ya, itu lebih dalam.
Membuat tombol yang terlihat seperti tombol Windows atau OS X itu mudah, ketika Anda hanya membangun tombol ini. Tetapi tombol harus "berperilaku" seperti yang asli, yang mungkin tidak mudah: mungkin ada lebih banyak ruang di satu versi yang tersedia, tetapi tidak di yang lain, mungkin warnanya lebih pas untuk desain Anda di versi Windows, dll.
Ini diuraikan saat Anda memiliki GUI secara keseluruhan: program OS X menyajikan kontennya berbeda dari program Windows. Ini hampir tidak mungkin untuk ditangkap dalam satu GUI - Anda akan membutuhkan dua GUI, tetapi tidak banyak aplikasi membuat banyak keributan. Sebaliknya mereka bertujuan untuk "terlihat oke di sebagian besar sistem" - ini masih terlihat agak asing, tetapi dapat digunakan dan lebih mudah untuk dikembangkan.
sumber
Tidak sulit untuk membuat tombol yang terlihat seperti tombol OSX, atau tombol Windows, atau toolkit lainnya. Tetapi pedoman UI untuk sebagian besar lingkungan tidak sesederhana dasar-dasar "ini seperti apa sebuah tombol." Ada banyak perbedaan yang lebih halus, dari jarak antara elemen UI ke urutan di mana tindakan terkenal tertentu akan muncul dalam daftar ke posisi yang tepat dari dialog Preferensi / Opsi dalam sistem menu. Satu dapat mengotomatiskan kasus yang paling umum untuk antarmuka pengguna yang sangat sederhana, tetapi banyak jika tidak sebagian besar tugas UI memerlukan sentuhan yang jauh lebih baik.
SWT mencoba mengotomatisasi ini sampai taraf tertentu, dan sekali lagi, ini cocok untuk tugas-tugas UI yang sederhana. Tetapi tidak ada solusi satu ukuran untuk semua, dan ketika UI menjadi lebih kompleks, metode dasar yang digunakannya mulai berantakan. Secara umum dimungkinkan untuk membawanya kembali sejalan dengan pekerjaan UI manual yang melelahkan, tetapi ini bukan sesuatu yang sebagian besar programmer mampu atau bersedia lakukan untuk semua platform.
Pendekatan Swing untuk ini adalah hanya menghindari toolkit asli bila memungkinkan. Ini bukan asli, dan tidak mencoba menjadi: sebaliknya, ia mencoba untuk membuat sesuatu yang akan terlihat (hampir) sama di mana pun itu dijalankan. Alih-alih mencoba (sia-sia) untuk menyenangkan semua orang, itu mencoba untuk menyenangkan dirinya sendiri, dan sementara itu berhasil sejauh yang berjalan, orang dapat mempertanyakan seberapa efektif hasilnya bagi komunitas pengguna yang lebih luas.
sumber
Ada pertukaran antara mengharapkan aplikasi Anda terlihat sealami mungkin pada setiap sistem dan mengharapkan aplikasi Anda bekerja dengan cara yang sama pada setiap sistem. Tidak ada pilihan "benar".
Selain itu, bahkan jika Anda memilih sisi "tampak alami", Anda mungkin ingin melindungi pengguna perangkat grafis Anda terhadap "peningkatan" pada komponen dan API asli yang mendasarinya yang mungkin merusak aplikasi mereka secara tak terduga.
Inilah sebabnya mengapa beberapa pengembang toolkit GUI lebih suka menyediakan komponen mereka sendiri yang meniru komponen asli, tetapi menyediakan implementasinya sendiri. Di sisi lain, mengembangkan perangkat GUI yang lengkap secara fungsional adalah upaya yang signifikan dan pertimbangan ekonomi dapat mengarah pada pemotongan beberapa keunggulan.
Perhatikan bahwa masalah ini tidak spesifik untuk Java, tetapi dihadapi oleh setiap perusahaan yang memproduksi perangkat platform independen.
sumber
Itu semua karena sejarah.
Sun berharap semua perangkat lunak Java bekerja sama di semua mesin.
Agar perangkat lunak “tampak asli”, ia harus bekerja sama dengan perangkat lunak lain pada OS yang diberikan.
Sun melakukan segala daya mereka untuk membuatnya sulit untuk menulis perangkat lunak Java yang terintegrasi dengan OS, karena setiap integrasi dengan OS akan membuat perangkat lunak bekerja secara berbeda pada setiap OS.
Saat ini sangat sedikit programmer Java yang peduli tentang apa pun selain perangkat lunak berbasis server web.
Sun membunuh Java di desktop dengan men-shafting semua programmer yang menggunakan sistem berbasis java Microsoft, karenanya membuat setiap programmer yang memilih Java pada hari-hari awal terlihat buruk.
Siapa pun yang menulis perangkat lunak desktop yang peduli tentang “tampak asli” telah lama belajar untuk tidak menggunakan Java dan pandangan mereka diperkuat setiap kali mereka menggunakan perangkat lunak Oracle apa pun.
Oleh karena itu hari ini tidak ada permintaan untuk "tampak asli" pada perangkat lunak desktop dari programmer Java.
sumber
Apa yang Anda pikirkan
native
sebenarnya adalah aplikasi asli yang melakukan hal mereka sendiri sementara toolkit seperti SWT mengikuti standar yang diterbitkan untuk UI OS tersebut. Masalahnya adalah bahwa tidak ada yang membuat aplikasi mengikuti standar-standar itu sehingga ketika Anda menjalankan aplikasi Java. Tampaknya bukan asli. Sebagai contoh, hampir semua proyek Microsoft (Office, Outlook, dll.) Tidak dapat direproduksi secara visual menggunakan kontrol standar Windows.Ini akan menjadi lebih buruk karena Microsoft dan Apple menambahkan fitur UI dinamis ke platform OS mereka. Mengizinkan pengembang untuk membuat kulit / gaya aplikasi mereka dengan cara yang sama seperti desain web membuat gaya untuk situs web.
Java pada platform Android mengikuti jalur ini. Membuat elemen UI untuk Android didefinisikan dalam XML dengan gaya skinnable.
Java tidak pernah sangat populer sebagai platform desktop. Sebagai akibatnya, perubahan-perubahan dalam industri ini tidak merambat ke runtimes desktop. Tidak ada cukup pengembang yang mau menghabiskan waktu untuk memperbaiki masalah ini.
sumber
Yang sistem operasi yang Anda ingin terlihat "asli" juga?
Anda tidak bisa menjadi asli dari mereka semua 100% dari waktu.
SWT dll. Adalah pendekatan upaya terbaik untuk terlihat sebagai asli bagi mereka semua karena ketika Anda perlu mencapai beberapa kompromi .
Dan faktanya, kompromi ini mulai menjadi semakin sulit untuk dijangkau; bukan karena sistem operasi, tetapi karena perangkat input. Untuk layar sentuh, Anda sebenarnya harus mendesain secara berbeda, karena tidak ada tombol mouse kanan. Karena itu, Anda perlu mengakomodasi fungsi yang sama jika tidak.
Tidak akan pernah ada tombol ajaib yang memindahkan fungsionalitas "secara intuitif" dari tombol mouse kanan ke guestures, tanpa Anda menentukan setiap aspek terperinci untuk setiap perangkat input tunggal (pada titik itu, Anda adalah asli dari setiap platform yang Anda pertimbangkan, tetapi tetap saja tidak -native untuk setiap Anda tidak dianggap).
sumber
Pertanyaan yang sangat bagus. Saya selalu bertanya-tanya tentang hal itu sendiri selama beberapa tahun berikutnya di masa lalu, saya pikir ada beberapa alasan yang sah di balik ini, tetapi sebenarnya tidak ada.
Saya pikir jawabannya agak sederhana, dan banyak jawaban tidak benar-benar menggali masalah ini.
Jika bahasa Anda memungkinkan untuk menggambar piexel di layar maka 100% memungkinkan untuk membuat kerangka kerja gui berdasarkan itu yang akan meniru kontrol bentuk Windows terlihat & terasa tepat.
Karena Java adalah crossplatform, maka sepenuhnya dimungkinkan untuk memastikan bahwa berdasarkan pada tipe sistem berjalan aktual (Mac / Windows) UI akan memilih untuk terlihat berbeda pada kedua platform, sesuai dengan gaya platform runtime.
Seperti yang Anda lihat di XAML misalnya UI dapat dengan mudah disajikan dalam bentuk dan bahasa yang sangat terstruktur. Memilih perilaku "asli" juga dimungkinkan jika waktu diambil untuk melakukan ini.
Jadi dimungkinkan untuk membuat kerangka kerja GUI yang memungkinkan pengembang Java mendapatkan aplikasi yang terlihat asli di Mac dan Windows.
Jadi kita sampai ke Swing, itu hanya satu kerangka GUI dari potensi tak terbatas kerangka GUI yang bisa dibuat untuk Java. Itu berperilaku bagaimana itu diprogram, yang tidak mengikuti proses di atas dan Anda mendapatkan aplikasi yang aneh di kedua sistem. Itulah pilihan yang dibuat oleh pengembang Swing, tidak ada yang memaksa mereka untuk melakukan ini dan berperilaku seperti itu.
sumber