Guida alle jDialog in Java

Creato il 15 luglio 2012 da Ketek @CarloVentrella

La jDialog è una componente essenziale della libreria swing in quanto ci permette di mostrare semplici messaggi o ottenere informazioni “obbligatorie”.

Perché obbligatorie?

Immaginiamo una possibile situazione: la prima volta che effettuiamo l’accesso ad un programma questo necessita di informazioni necessarie che noi dobbiamo fornirgli. Usare un normale JFrame sarebbe rischioso in quanto basterebbe chiuderlo per andare “oltre”, ma a noi servono i dati!

Quindi…

Diventa indispensabile un componente che blocchi tutte le altre finestre fino al corretto inserimento delle informazioni: è proprio JDialog.

Con questo codice vi spiego come poter realizzare una dialog che chiede alcuni dati all’utente e li restituisce alla chiusura della finestra.

 
import java.awt.Dimension;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
public class dialog implements ActionListener
{
    JDialog frame;
    JButton ok;
    JTextField  nome = new JTextField();
    JTextField  cognome = new JTextField();
    JTextField  città = new JTextField();
 
    // Dati necessari
    String nome_f = "";
    String cognome_f = "";
    String città_f = "";
 
public dialog(JFrame f)
{
                ok = new JButton("Ok");
                frame = new JDialog(f);
 
                frame.setModal(true);
 
               JLabel nome_l = new JLabel("Nome");
               JLabel cognome_l = new JLabel("Cognome");
               JLabel città_l = new JLabel("Città");
 
                Panel panel = new Panel();
                panel.setSize(300,180);
                panel.setMaximumSize(new Dimension(300,180));
                panel.setMinimumSize(new Dimension(300,180));
                panel.setPreferredSize(new Dimension(300,180));
                panel.setLayout(null);
 
                //dialog
                frame.setBounds(0, 0, 300, 180);
 
               // label nome, destinazione,root
               nome_l.setBounds(20,20,70,20);
               cognome_l.setBounds(20,70,70,22);
               città_l.setBounds(20,120,70,22);
 
               // textfield
               nome.setBounds(95, 25, 170, 20);
               cognome.setBounds(95, 75, 170, 20);
               città.setBounds(95, 125, 170, 20);
 
            // textfield to panel
            panel.add(nome);
            panel.add(cognome);
            panel.add(città);
 
            // ok button
           ok.setBounds(250, 150, 20, 18);
           ok.setBorder(null);
           ok.addActionListener(this);
 
          // Aggiungo i componenti al pannello
          panel.add(nome_l);
          panel.add(cognome_l);
          panel.add(città_l);
          panel.add(ok);
 
          frame.add(panel);
          frame.setResizable(false);
          frame.pack();
          frame.setVisible(true);
 
}
 
        public String [] getData()
        {
            String [] info = {nome_f,cognome_f,città_f};
            return info;
        }
 
         public static void main(String Args[])
       {
                String [] info = new dialog(null).getData();
                System.out.println("1 - " + info[0]+"");
                System.out.println("2 - " + info[1]+"");
                System.out.println("3 - " + info[2]+"");
                System.exit(0);
         }
 
    @Override
    public void actionPerformed(ActionEvent ae) {
 
        System.out.println("Ho raccolto i file ");
 
                // raccolgo i dati
                nome_f = nome.getText().trim();
                cognome_f = cognome.getText().trim();
                città_f = città.getText().trim();
 
                frame.dispose();
    }
}
 

L’unico parametro da passare per la creazione della dialog è il frame che “chiama” la finestra: è un passaggio essenziale in quanto, all’apertura della dialog, il frame di appartenenza deve essere bloccato!

In questo esempio la finestra non è generata da altri frame, infatti, nel momento in cui questa è creata gli viene passato come parametro il valore null.