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);}
@Overridepublic 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.