Dengarkan sakelar tab pada panel JTabbedPane

Saya telah mengembangkan Swing GUI sederhana untuk memungkinkan pengguna mengedit data aplikasi saya. UI-nya agak sederhana:

  • JFrame yang berisi JTabbedPane.
  • Setiap tab terdiri dari satu subkelas JPanel yang menawarkan alat untuk mengedit aspek data.
  • Datanya sendiri terkandung dalam satu objek dan referensi diteruskan ke masing-masing JPanel.

Tapi ada masalah: Saya perlu menyinkronkan JPanel yang berbeda.

Misalnya, objek data menyimpan daftar orang dan daftar tugas.

  • Satu JPanel memungkinkan pengguna untuk mengedit orang. Dia dapat membuat Orang baru dan menghapus Orang yang sudah ada.

  • JPanel kedua memungkinkan pengguna untuk menugaskan orang untuk melakukan tugas.

Kedua JPanel diinisialisasi saat pertama kali dibuka. Komponen dibuat dan tata letaknya diatur. Sekarang pengguna dapat mulai bekerja dengan UI.

  1. Dia membuka tab pertama JTabbedPane dan membuat Person pertama.
  2. Dia membuka tab kedua. Komponen pada tab kedua diinisialisasi dan mencantumkan satu orang yang tersedia. Dia memberikan tugas.
  3. Dia kembali ke tab pertama dan menciptakan orang kedua.
  4. Dia beralih kembali ke tab kedua untuk berurusan dengan orang baru.

Namun tab kedua dan JPanel di dalamnya sudah diinisialisasi. Pengguna tidak akan melihat orang kedua, kecuali JPanel diperbarui. Saya telah menerapkan metode pembaruan khusus pada subkelas JPanel saya untuk tab 2. Tapi bagaimana cara menyebutnya?

Saya memerlukan acara Swing yang diaktifkan pada Komponen, saat digambar ulang.


person lhk    schedule 27.06.2013    source sumber
comment
Anda harus memiliki model data GUI, yang berisi semua informasi orang dan tugas. Setiap JPanel akan diperbarui, dan diperbarui berdasarkan konten model data melalui tindakan pengontrol. Ini adalah arsitektur model/tampilan/pengontrol untuk membangun aplikasi GUI.   -  person Gilbert Le Blanc    schedule 27.06.2013
comment
Saya tahu pola MVC. Ayunan cukup memaksa Anda untuk menggunakannya. Apa yang saya coba terapkan adalah pengontrolnya. Saya hanya perlu menemukan cara agar pengontrol mengetahui kapan data telah diperbarui. Victor Seifert memberikan jawaban yang sempurna   -  person lhk    schedule 27.06.2013


Jawaban (1)


Sebenarnya memperbarui panel kedua ketika panel pertama digambar ulang adalah ide yang buruk bahkan jika Anda berhasil menemukan acara yang dipecat. Hal ini akan menyebabkan panel kedua diperbarui pada setiap gambar ulang panel pertama, terlepas dari apakah gambar ulang tersebut berarti bahwa data yang tidak terhapuskan telah berubah atau tidak (pikirkan tentang data yang belum disimpan).

Anda harus menjadikan data yang dimanipulasi tab Anda Observable (atau Subject dari Pola Pengamat). Kemudian setiap tab dapat bereaksi terhadap perubahan data, bukan perubahan pada tab lainnya. Ini akan mengurangi waktu pembaruan menjadi hanya ketika benar-benar diperlukan dan juga akan memisahkan tab satu sama lain.

Data dapat mengulangi perubahan dengan mengaktifkan PropertyChangeEvent. Hal ini pada gilirannya akan memicu tindakan Pengendali seperti yang disarankan oleh Gilber Le Blanc di komentar.

person Viktor Seifert    schedule 27.06.2013
comment
bagus, persis apa yang saya cari - person lhk; 27.06.2013