Uso spesso dei JDialog personalizzati, utili soprattutto per visualizzare alcune informazioni.

In questi casi mi rimane comodo chiuderli semplicemente con il tasto ESC.

In sostanza dobbiamo registrare una registerKeyboardAction, impostando il tasto ESC.

Sono rimasto un pò sorpreso dal fatto che i JFrame non hanno la possibilità di essere finestre modali.

Essendo un componente molto usato, lo davo per scontato.

Però, se vogliamo creare finestre modali in Java, possiamo comunque rivolgerci ai JDialog.

Estendendo questa classe, possiamo creare finestre con tutti i componenti che vogliamo, e rendere la finestra modale.

Oggi vediamo un esempio.

All'interno ci piazziamo anche un JPanel; in questo modo possiamo personalizzare la finestra come ci pare, in quanto ci basterà mettere i componenti che ci servono dentro al JPanel.

In questo articolo, abbiamo visto come creare dei JDialog in ambiente multi-thread con SwingWorker.

Oggi vediamo un esempio simile, ma usando la Reflection.

Il risultato finale è lo stesso, ma il codice è più pulito.

Partiamo dall'evento nel nostro JFrame:

btnConnect.addActionListener((ActionEvent e) -> {
    final GenericDialog loading = new GenericDialog(this, "", "Loading...");
    BackgroundOperation bo = new BackgroundOperation("com_mattepuffo_book.FormBook", "createConnection", loading);
    bo.execute();
    loading.setVisible(true);
});

Quello che vediamo oggi è come creare un JDialog che compare in fase di caricamento, e che scompare al termine dell'operazione.

Un loading dialog in sostanza.

Partiamo da un JDialog tipo quello che ho postato in questo articolo (ma uno vale l'altro).

I JDialog sono componenti usati principalmente per avvertire l'utente di qualcosa.

Lanciare un JDialog, di per se, non è complicato; ma creare una classe che estende JDialog per lanciarlo senza riscrivire la ruota è meglio.

E comunque, in generale, creando una classe apposita possiamo personalizzarlo.