Saya membuat jam dunia menggunakan Java Swing. Jamnya sendiri tidak terlalu rumit. Alasan saya melakukan proyek mini ini adalah untuk melihat apakah saya dapat menyesuaikan zona waktu.
Berikut GUI dengan zona waktu default.
Berikut JDialog
yang menunjukkan berbagai zona waktu di seluruh dunia.
Anda dapat memilih zona waktu sebanyak yang Anda inginkan, meskipun saya menyarankan 10 zona waktu adalah batas praktis untuk sebagian besar tampilan terkini.
JDialog
memungkinkan Anda untuk memindahkan zona waktu dari daftar utama ke daftar tampilan, dan dari daftar tampilan ke daftar utama. Anda dapat menghapus semua zona waktu yang ditampilkan jika ingin memulai dari awal. Anda harus memilih setidaknya satu zona waktu untuk ditampilkan,
Daftar utama tetap dalam urutan abjad. Daftar tampilan menampilkan zona waktu sesuai urutan yang Anda pilih. Menahan tombol Ctrl
sambil mengklik kiri mouse memungkinkan Anda memilih beberapa zona waktu untuk ditambahkan atau dihapus dari daftar.
Kode ini tidak menyimpan zona waktu yang Anda pilih ke file properti. Ini adalah sesuatu yang dapat ditambahkan jika Anda ingin menggunakan jam dunia ini sebagai file JAR yang dapat dieksekusi.
Oracle memiliki tutorial bermanfaat, Membuat GUI Dengan Swing. Lewati bagian Learning Swing dengan NetBeans IDE.
Saat saya membuat aplikasi Swing, saya menggunakan pola model-view-controller (MVC). Pola ini memungkinkan saya memisahkan kekhawatiran saya dan fokus pada satu bagian aplikasi Swing dalam satu waktu. Nama polanya menyiratkan bahwa Anda membuat modelnya terlebih dahulu, lalu tampilannya, dan terakhir pengontrolnya. Ini merupakan proses yang berulang, sehingga perubahan pada tampilan atau pengontrol dapat menyebabkan perubahan pada model.
Untuk aplikasi Swing, pola MVC berarti:
Tampilan membaca informasi dari model.
Tampilan tidak memperbarui model.
Pengontrol memperbarui model dan mengecat ulang/memvalidasi ulang tampilan.
Biasanya tidak ada satu pengontrol yang "mengatur semuanya". Setiap Action
atau ActionListener
bertindak secara independen dan memperbarui bagian model dan tampilannya.
Saya membuat satu kelas model, kelas WorldClockModel
. Kelas ini berisi tanggal dan waktu ZonedDateTime
saat ini, java.util.List
semua zona waktu, dan java.util.List
zona waktu yang akan ditampilkan. Saya memilih ZonedDateTime
sehingga saya hanya perlu menyimpan waktu saat ini satu kali. Saya dapat meneruskan ZoneId
ke ZonedDateTime
untuk mendapatkan waktu saat ini di zona waktu mana pun.
List
semua zona waktu berasal dari metode ZoneId
getAvailableZoneIds
. Saya memfilter zona waktu yang tidak terkait dengan kota.
Saya membuat dua kelas tampilan, kelas WorldClockGUI
dan kelas DisplayPanel
. Kelas WorldClockGUI
membuat JFrame
dan JPanel
utama. JPanel
utama terdiri dari instance DisplayPanel
, satu untuk setiap zona waktu yang akan ditampilkan.
JFrame
memiliki BorderLayout
default, jadi saya menempatkan JPanel
utama di tengah BorderLayout
. JPanel
utama menggunakan GridLayout
untuk menempatkan instance DisplayPanel
dalam dua kolom dengan jarak yang sama.
JDialog
memperlihatkan daftar semua zona waktu, daftar zona waktu yang ditampilkan, dan mengontrol JButtons
untuk memindahkan zona waktu dari satu daftar ke daftar lainnya. Saya menggunakan dua DefaultListModels
, satu untuk setiap daftar.
Kelas TimezoneDialogListener
menyalin daftar tampilan dari tampilan DefaultListModel
kembali ke kelas model aplikasi dan memperbarui tampilan.
Swing Timer
memperbarui waktu saat ini setiap 20 detik. Ini cukup akurat untuk jam yang menampilkan jam dan menit.
JButtons
lainnya di JDialog
memicu ActionListeners
anonim untuk melakukan tugasnya. Pendengarnya pendek, jadi masuk akal untuk menjadikan mereka kelas anonim.