NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Java 2D - 42: creare ed estendere le JDialog

Guida Java 2D, corso di base 

 

JDialogLe JDialog sono finestre di 'secondo livello', utilizzate per comunicare informazioni all'utente, consentire la scelta di opzioni o l'input di dati mediante tastiera.

 

Un esempio 'precotto' di JDialog è JOptionPane, che abbiamo preso in esame nel capitolo 9 di questa guida.

 

 

 

Costruttori di JDialog:

  • JDialog()

  • JDialog(Dialog owner)

  • JDialog(Dialog owner, boolean modal)

  • JDialog(Dialog owner, String title)

  • JDialog(Dialog owner, String title, boolean modal)

  • JDialog(Frame owner)

  • JDialog(Frame owner, boolean modal)

  • JDialog(Frame owner, String title)

  • JDialog(Frame owner, String title, boolean modal)

 

Proprio come le JOptionPane (ma la cosa non dovrebbe sorprenderci poi tanto!), le JDialog possono essere attivate in maniera 'modale': possono, cioè, bloccare il thread che le ha avviate (spesso ciò significa l'intero programma, per programmi a singolo thread) finchè l'utente non chiuderà la finestra, cliccando sui pulsanti (Ok, Annulla, ...) o sul pulsante di chiusura della JDialog.

 

E' possibile attivare o disattivare questa modalità all'atto della creazione di una JDialog o mediante il metodo:

setModal(boolean b)   :   void .

 

Per una trattazione completa, si rimanda alle API ufficiali di tale componente.

 

Con un pò di pratica e (molta) pazienza, è possibile creare delle JDialog 'personalizzate', inserendovi le componenti desiderate e recuperando, poi, i valori immessi dall'utente (qualora la nostra JDialog consenta l'input, e a patto di implementare un metodo che restituisca tali valori !).

 

La porzione di codice che segue definisce due classi:

  • la classe EsempioDialogPersonalizzata, eseguibile, che - all'interno del main - istanzia una 'DialogPersonalizzata' che prende in input due parametri e, successivamente, una Message Dialog di JOptionPane, che mostra a video i valori inseriti dall'utente al passo precedente;

  • la classe DialogPersonalizzata, che estende JDialog ed implementa ActionListener: si tratta di una finestra di dialogo modale che contiene, disposti in pannelli, etichette, caselle di testo e pulsanti, e che consente all'utente di inserire dei valori; fornisce, inoltre, il metodo getData(), che restituisce un array di stringhe (il contenuto delle textfield).

 

Da notare che, per come è definita DialogPersonalizzata, il messaggio da mostrare nella JLabel posta all'interno della finestra viene inviato all'atto della creazione della stessa, ma questa è solo una mia scelta implementativa (per mostrare la flessibilità delle JDialog), non vincolante.

 

Ecco il codice:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class EsempioDialogPersonalizzata
{
public static void main(String[]args)
{
String[] dati = new DialogPersonalizzata("Questa JDialog prende in input due stringhe").getData();
JOptionPane.showMessageDialog(null, "Hai inserito, per campo 1, il seguente valore: \"" + dati[0] + "\" e, per campo 2, il seguente valore: \"" + dati[1] + "\"");
System.exit(0);
}
}


class DialogPersonalizzata extends JDialog implements ActionListener
{
JTextField tf1 = new JTextField(30);
JTextField tf2 = new JTextField(30);
JButton btnOK = new JButton(" OK ");
JButton btnCancel = new JButton("Cancella");
String str1 = "";
String str2 = "";

public DialogPersonalizzata(String messaggio)
{
setTitle("Finestra JDialog personalizzata");
setModal(true);
getContentPane().setLayout(new BorderLayout());
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocation(400,300);
getContentPane().add(new JLabel(messaggio),BorderLayout.NORTH);
JPanel pannelloInterno = new JPanel();
getContentPane().add(pannelloInterno);
pannelloInterno.setLayout(new GridLayout(2,2));
pannelloInterno.add(new JLabel("Campo 1"));
pannelloInterno.add(tf1);
pannelloInterno.add(new JLabel("Campo 2"));
pannelloInterno.add(tf2);
JPanel jp = new JPanel();
btnOK.addActionListener(this);
btnCancel.addActionListener(this);
jp.add(btnOK);
jp.add(btnCancel);
getContentPane().add(jp,BorderLayout.SOUTH);
pack();
setVisible(true);
}

public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == btnOK)
{
str1 = tf1.getText();
str2 = tf2.getText();
}
dispose();
}

public String[] getData()
{
String [] output = new String[2];
output[0] = str1;
output[1] = str2;
return output;
}
}

 

 

 

Per un elenco completo (lista) dei tutorial e videotutorial su Java, Java 2D, Java 3D e J2ME, clicca qui


 
Libri e eBook sul linguaggio di programmazione Java:
 
 
ebook PDF "Java 3D: guida di base" di Francesco Milanese
 
 
 
 
 

 

Pagina di Francesco Milanese (redbaron85) su Facebook   Pagina di Francesco Milanese (redbaron85) su Google Plus   Profilo di Francesco Milanese (redbaron85) su LinkedIn   Pagina di Francesco Milanese (redbaron85) su Twitter   Canale Youtube di Francesco Milanese (redbaron85ct)

Vai all'inizio della pagina