Apa cara yang benar JFrame
untuk menutup, sama seperti jika pengguna telah menekan X
tombol tutup, atau menekan Alt+ F4(pada Windows)?
Saya memiliki operasi tutup default saya mengatur yang saya inginkan, melalui:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Ia melakukan persis apa yang saya inginkan dengan kontrol yang disebutkan di atas. Pertanyaan ini bukan tentang itu.
Apa yang benar-benar ingin saya lakukan adalah menyebabkan GUI berperilaku dengan cara yang sama seperti menekan X
tombol tutup akan membuatnya berperilaku.
Misalkan saya memperpanjang WindowAdaptor
dan kemudian menambahkan contoh adaptor saya sebagai pendengar melalui addWindowListener()
. Saya ingin melihat urutan yang sama dari panggilan melalui windowDeactivated()
, windowClosing()
dan windowClosed()
seperti yang akan terjadi dengan X
tombol tutup. Tidak begitu banyak merobek jendela seperti mengatakannya untuk merobek sendiri, begitu untuk berbicara.
Jawaban:
Jika Anda ingin GUI berperilaku seperti jika Anda mengklik
X
tombol tutup maka Anda harus mengirim acara penutupan jendela keWindow
. TheExitAction
from Closing An Application memungkinkan Anda untuk menambahkan fungsionalitas ini ke item menu atau komponen apa pun yang menggunakanAction
s dengan mudah.sumber
Tidak terlalu rumit.
sumber
Jika dengan Alt-F4 atau X yang Anda maksud "Keluar Aplikasi Segera Tanpa Regard untuk Apa Windows yang lainnya atau Thread yang Running", maka
System.exit(...)
akan melakukan persis apa yang Anda inginkan dalam sangat mendadak, brute-force, dan fashion mungkin bermasalah.Jika dengan Alt-F4 atau X maksud Anda menyembunyikan jendela, maka
frame.setVisible(false)
adalah bagaimana Anda "menutup" jendela. Jendela akan terus mengkonsumsi sumber daya / memori tetapi dapat dibuat terlihat kembali dengan sangat cepat.Jika dengan Alt-F4 atau X maksud Anda menyembunyikan jendela dan membuang sumber daya apa pun yang dikonsumsi, maka
frame.dispose()
adalah bagaimana Anda "menutup" jendela. Jika bingkai adalah jendela yang terlihat terakhir dan tidak ada utas non-daemon lain yang berjalan, program akan keluar. Jika Anda menunjukkan jendela lagi, itu harus menginisialisasi ulang semua sumber daya asli lagi (buffer grafis, pegangan jendela, dll).dispose()
mungkin paling dekat dengan perilaku yang Anda inginkan. Jika aplikasi Anda memiliki beberapa jendela terbuka, apakah Anda ingin Alt-F4 atau X untuk keluar dari aplikasi atau hanya menutup jendela yang aktif?The Java Swing Tutorial Pendengar Jendela dapat membantu memperjelas hal-hal untuk Anda.
sumber
Jika Anda telah melakukan ini untuk memastikan pengguna tidak dapat menutup jendela:
Maka Anda harus mengubah
pullThePlug()
metode Anda menjadiSaya menemukan ini menjadi satu-satunya cara yang bermain bagus dengan
WindowListener
danJFrame.DO_NOTHING_ON_CLOSE
.sumber
Ini akan menjadi pilihan Anda:
sumber
Keluar dari proses menjalankan Java sangat mudah, pada dasarnya Anda hanya perlu melakukan dua hal sederhana:
System.exit(...)
di titik berhenti aplikasi. Misalnya, jika aplikasi Anda berbasis bingkai, Anda dapat menambahkan pendengarWindowAdapter
dan memanggilSystem.exit(...)
metode di dalamnyawindowClosing(WindowEvent e)
.Catatan: Anda harus menelepon
System.exit(...)
jika tidak, program Anda terlibat kesalahan.System.exit(...)
pada titik yang benar, tetapi itu tidak berarti bahwa metode dapat dipanggil selalu, karena pengecualian java yang tidak terduga dapat mencegah metode dari dipanggil.Ini sangat terkait dengan keterampilan pemrograman Anda.
** Mengikuti adalah contoh paling sederhana (
JFrame
berdasarkan) yang menunjukkan kepada Anda cara memanggil metode keluarsumber
Tidak hanya untuk menutup JFrame tetapi juga untuk memicu acara WindowListener, coba ini:
sumber
Cara terbaik untuk menutup bingkai Swing secara terprogram adalah dengan membuatnya berperilaku seperti ketika tombol "X" ditekan. Untuk melakukan itu, Anda perlu menerapkan WindowAdapter yang sesuai dengan kebutuhan Anda dan mengatur operasi tutup default frame untuk tidak melakukan apa-apa (DO_NOTHING_ON_CLOSE).
Inisialisasi bingkai Anda seperti ini:
Anda dapat menutup frame secara terprogram dengan mengirimkannya acara WINDOW_CLOSING, seperti ini:
Ini akan menutup bingkai seperti tombol "X" ditekan.
sumber
Jika Anda benar-benar tidak ingin aplikasi Anda berakhir saat JFrame ditutup,
gunakan:
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
dari pada :
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Berikut sinopsis dari bagaimana solusinya,
sumber
Jawaban ini diberikan oleh Alex dan saya ingin merekomendasikannya. Itu bekerja untuk saya dan hal lain itu mudah dan sangat sederhana.
sumber
Contoh ini menunjukkan bagaimana mewujudkan operasi tutup jendela yang dikonfirmasi.
Jendela memiliki adaptor Jendela yang mengalihkan operasi tutup default ke
EXIT_ON_CLOSE
atauDO_NOTHING_ON_CLOSE
tergantung pada jawaban Anda di WindowsOptionDialog
.Metode
closeWindow
dariConfirmedCloseWindow
kebakaran acara jendela dekat dan dapat digunakan di mana saja yaitu sebagai aksi item menusumber
Berdasarkan jawaban yang telah disediakan di sini, ini adalah cara saya menerapkannya:
JFrame membuat acara tutup dan setelah ditutup, keluar.
sumber
Anda harus memasukkan panggilan ke dalam antrian pesan AWT sehingga semua waktunya terjadi dengan benar, jika tidak, ia tidak akan mengirimkan urutan kejadian yang benar, terutama dalam program multi-utas. Ketika ini selesai, Anda dapat menangani urutan kejadian yang dihasilkan persis seperti yang Anda lakukan jika pengguna telah mengklik tombol [x] untuk OS yang didekorasi dengan JFrame.
sumber
Saya sudah mencoba ini, menulis kode Anda sendiri untuk acara formWindowClosing () .
Ini menanyakan pengguna apakah ia ingin keluar dari Frame atau Aplikasi.
sumber
Posting apa yang ada di badan pertanyaan sebagai jawaban CW.
Ingin berbagi hasil, terutama berasal dari mengikuti tautan camickr. Pada dasarnya saya perlu melemparkan
WindowEvent.WINDOW_CLOSING
di antrian acara aplikasi. Berikut ini sinopsis dari bagaimana solusinyasumber
Jika Anda tidak ingin aplikasi Anda berhenti ketika JFrame ditutup, gunakan: setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)
alih-alih: setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Dari dokumentasi:
DO_NOTHING_ON_CLOSE (defined in WindowConstants)
: Jangan lakukan apa pun; membutuhkan program untuk menangani operasi dalam metode penutupan jendela objek WindowListener terdaftar.HIDE_ON_CLOSE (defined in WindowConstants)
: Secara otomatis menyembunyikan bingkai setelah memohon objek WindowListener yang terdaftar.DISPOSE_ON_CLOSE (defined in WindowConstants)
: Secara otomatis menyembunyikan dan membuang bingkai setelah memohon objek WindowListener yang terdaftar.EXIT_ON_CLOSE (defined in JFrame)
: Keluar dari aplikasi menggunakan metode keluar Sistem. Gunakan ini hanya dalam aplikasi.mungkin masih berguna: Anda dapat menggunakan
setVisible(false)
JFrame Anda jika Anda ingin menampilkan frame yang sama lagi. Atau panggildispose()
untuk menghapus semua sumber daya layar asli.disalin dari Peter Lang
https://stackoverflow.com/a/1944474/3782247
sumber
sumber
setVisible(false)
.setVisible(false); .setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);