Saya baru saja mulai membuat aplikasi Java Swing kecil pertama saya. Ketika program terbuka, ia memunculkan satu jendela sederhana dengan label dan beberapa tombol. Mengklik salah satu tombol itu seharusnya menghapus layar pembuka dan menggantinya dengan panel yang sama sekali berbeda.
Saya tidak yakin apa cara terbaik untuk membuat fungsionalitas itu. Salah satu metode yang akan saya gunakan JFrame
sebagai argumen ke ... hampir setiap komponen lainnya, tapi itu terasa membingungkan bagi saya. Atau, ada yang membuat setiap panel berfungsi ganda sebagai pendengar tindakan, tetapi itu juga tampaknya tidak tepat.
Apakah ada pola desain yang harus saya terapkan di sini? "Ganti isi jendela utama - dan hanya -" harus merupakan operasi yang cukup umum. Nama untuk polanya cukup; Saya dapat menggunakan Google sendiri dari sana. (Namun, saya tidak akan mengatakan tidak pada penjelasan yang lebih panjang.)
sumber
Jawaban:
Saat membuat aplikasi Swing, saya biasanya mendasarkannya pada Pola Mediator. Dalam pola ini, kelas Mediator (biasanya JFrame utama) menangani bagian GUI yang berbeda (biasanya JPanels, JMenus ...) dan menangani komunikasi di antara mereka.
Misalnya, jika suatu peristiwa terjadi di JPanel1, JPanel1 memberi tahu mediator (JFrame). JFrame kemudian mengambil tindakan dengan memodifikasi JPanel2.
FYI: semua proyek saya adalah aplikasi GUI kecil hingga menengah, jadi saya tidak yakin pola ini berskala baik. Tetapi jika Anda dapat merancang arsitektur yang memadai, pola Mediator dapat menjadi dasar yang kuat.
sumber
Anda dapat memiliki metode utama menampilkan JDialog. Ketika dialog ditutup, JFrame utama dibuat dan ditampilkan.
JDialog memberi Anda metode statis yang mudah digunakan yang menampilkan dialog dengan konten dan tombol khusus, dan mengembalikan kode tombol yang diklik. Dengan menguji nilai ini, metode utama Anda dapat memutuskan untuk menampilkan bingkai utama atau keluar (atau apa pun). Silakan baca Javadoc.
Tidak seperti beberapa kerangka kerja UI yang lebih lama, aplikasi Swing tidak diikat ke bingkai atau jendela tertentu. Anda dapat membuat jendela sebanyak yang Anda inginkan. Aplikasi berakhir ketika semua utas berakhir, bukan ketika semua jendela telah dibuang. Ini biasanya dicapai dengan System.exit (0).
Saya tidak tahu apakah ada pola desain khusus untuk kasus itu. Saya merekomendasikan tutorial Java Swing.
sumber
Banyak kerangka kerja UI memiliki aturan berbeda mengenai jendela 'utama' atau 'aktif'. Salah satu cara untuk mengelola kerumitan itu adalah dengan membuat jendela utama Anda, yang mengontrol lingkaran pesan utama, menjadi jendela yang tidak terlihat (atau layar berukuran 1 piksel kecil tanpa warna, dari layar untuk kerangka kerja yang sangat mengganggu). kemudian minta semua jendela dan dialog lainnya menjadi anak dari jendela itu.
Metode ini memiliki banyak keuntungan, terutama ketika berhadapan dengan peristiwa global keycicks dan mouse, serta dalam pencatatan tingkat atas dan penanganan pengecualian.
sumber