Menggunakan notify Pada NotifyDescriptor Netbeans Platform

Gw agak2 heran c yah… kenapa beberapa waktu terakhir banyak banget yang nanyain tentang Netbeans Platform ke gw. Padahal kan gw jugak dah lumayan lama gak nyentuh2 NetPla. Tapi ya sudahlah yah… Reader tetep ajah reader yang bisa jadi inspirasi blogger buat nulis sesuatu.

Okeh! Jadi, berangkat dari tujuan itu, gw nulisin nih tulisan.

Topik yang ditanyain yaitu terkait NotifyDescriptor plus temennya DialogDisplayer. Terkait 2 hal itu, gw asumsiin kamu semua dah pada tau dua hal itu apa yah… Intinya, NotifyDescriptor itu komponen di NetPla yang punya fungsi mirip sama JOptionPane. Bedanya, kalo di JOptionPane, kamu cuma nentuin konten (gambar, kata2, judul, tombol de el el). Sedangkan di NotifyDescriptor, kamu bisa desain sendiri apa yang kamu tampilin. Mulai dari jumlah masukan yang kamu mau, tombol apa yang ditampilin, bahkan warna panel yang kamu sukak buat ditampilin ke pengguna aplikasi yang kamu bikin. Itu gunanya si NotifyDescriptor. Terus, si DialogDisplayer punya fungsi buat munculin si NotifyDescriptor biar bisa muncul di hadapan pengguna. Okeh.. itu intinya.

Pertanyaan aslinya, yaitu tentang menampilkan objek NotifyDescriptor dari DialogDisplayer. Faktanya, di sini kamu bisa nampilin dengan menggunakan 2 method, yaitu “notify” sama “notifyLater”. Dan yaaa… itulah pertanyaannya. Apa bedanya cara nampilin pake “notify” sama “notifyLater”?

Jawaban gw c singkat ajah ya… Bedanya… kamu baca deh netbeans doc. Ntar juga ketemu. Atau kalo males, nih gw kutip dokumentasinya.

public abstract Object notify(NotifyDescriptor descriptor)

Notify the user of something in a message box, possibly with feedback.

To support both GUI and non-GUI use, this method may be called from any thread (providing you are not holding any locks), and will block the caller’s thread. In GUI mode, it will be run in the AWT event thread automatically. If you wish to hold locks, or do not need the result object immediately or at all, please make this call asynchronously (e.g. from the request processor).

Parameters:
descriptor – description of the notification

Returns:
the option that caused the message box to be closed

Yang atas buat notify, yang bawah buat notifyLater

public void notifyLater(NotifyDescriptor descriptor)

Notify the user of something in a message box, possibly with feedback, this method method may be called from any thread. The thread will return immediately and the dialog will be shown later, usually when AWT thread is empty and can handle the request.

Implementation note: Since version 7.3, implementation improved to work also before main window is opened. For example: When method is called from ModuleInstall.restored, then modal dialog is opened and blocks main window until dialog is closed. Typical use case is login dialog.

Parameters:
descriptor – description of the notification

Since:
7.0

Jadi intinya, yang atu method berupa prosedur (notifyLater), atunya berupa function (notify). Jadi yang satunya mengharapkan adanya nilai balikan pas pemanggilannya, satunya lagi enggak. Sesuai sama sifat fungsi atau prosedur. Terus, kapan kita musti ngegunain salah satunya dibanding yang lain?! Jawabannya juga bisa kamu liat di atas. Kalo seandainya kamu musti nampilin sesuatu sebelum main window muncul, bisa pake notifyLater.

Gak ada salahnya juga kamu make notify. Tapi ati2 ajah ama kode kamu. Karena ga sekali dua kali gw nemu kejadian kalo aplikasinya masih jalan secara background walo main window-nya udah ditutup karena programmernya (iya, gw c maksudnya) make notify, dan bukannya notifyLater.

Kalo seandainya ada satu kondisi yang ngeharusin kamu pake notify dan bukannya notifyLater, padahal kamu musti nampilin message box-nya sebelum main window ke-load, kamu bisa kasih aksi ke si objek NotifyDescriptor-nya gini:

        DialogDisplayer.getDefault().notify(nd);

        nd.addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if (evt.getNewValue().equals(NotifyDescriptor.CLOSED_OPTION)) {
                    LifecycleManager.getDefault().exit();
                } else if (evt.getNewValue().equals(NotifyDescriptor.OK_OPTION)) {
                    //logika
                } else {
                    LifecycleManager.getDefault().exit();
                }
            }
        });

Cukup jelas kan yah? Hal di atas perlu kamu lakuin. Kenapa?! Karena kalo enggak, pas nutup message box-nya, program kamu ada kemungkinan masih jalan sebagai proses background. Gak bagus buat pengguna kamu. Tiba2 memorinya penuh gara2 aplikasi yang kamu bikin. Command exit() gak bakal ngaruh dalam pengkondisian penyamaan objek yang merupakan balikan dari pemanggilan notify(). Jadi ati2 yah…

Dan begitulah caranya… maaf yak kalo ternyata ga terlalu jelas. Cuma segitu yang bisa gw bagi. Maaf jugak, buat kali ini gw gak nyantumin sumber plus info kevalidan buat hal di atas. Yah… gitu deh…

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s