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

Guida Java 2D - Capitolo 06: Frame AWT e JFrame Swing.

 

JFrame

 

Un Frame (lett.: 'cornice') è, a livello visivo, una superficie rettangolare provvista di una barra del titolo contenente, appunto, un titolo, un'icona e i tasti per la riduzione ad icona e per la chiusura della stessa; offre, inoltre, la possibilità di ridimensionare la superficie visibile mediante il mouse.

 

 

Utilizzeremo i JFrame di Swing, che sostituiscono ampiamente i Frame di AWT risolvendo alcuni problemi e malfunzionamenti di questi ultimi.

 

Un JFrame contiene una successione di particolari pannelli, elencati qui di seguito seguendo l'ordine 'dal JFrame posto sul fondo verso l'utente':

  • il root pane, 'adagiato' direttamente sulla superficie del JFrame, che contiene il glass pane;
  • il glass pane, un pannello invisibile che cattura le azioni effettuate mediante il puntatore del mouse sulla finestra;
  • il layered pane, che serve a contenere un eventuale menù e il content pane;
  • il content pane, che serve a contenere tutti gli elementi della GUI (componenti, contenitori, elementi di alto e basso livello) da aggiungere al JFrame.

Gli elementi (sia di basso che di alto livello, con l'unica eccezione della barra del menù e del suo contenuto) non possono essere aggiunti direttamente al JFrame: dovremo aggiungere al contentPane del Frame un componente ed operare su quest'ultimo per poter inserire degli elementi 'sul JFrame'.

 

Vedremo, nei prossimi capitoli, come aggiungere menù e pannelli al Frame; mediante i pannelli, sarà poi possibile aggiungere tutte le altre componenti di alto e di basso livello della GUI alla superficie del JFrame.

 

Prima di mostrare un esempio pratico di creazione e visualizzazione di un JFrame, comunque, risolviamo un "problema di base": quello dell'evento da associare al click del mouse sul pulsante di chiusura del JFrame, posto, in genere, in alto a destra nello stesso.

 

Generalmente a tale evento è associata la chiusura dell'applicazione, ma questo comportamento non è quello implementato di default da Java, e questo per lasciare una maggiore flessibilità nell'utilizzo di quel particolare pulsante (in effetti, può anche capitare di chiudere una finestra senza per questo dover terminare l'intera applicazione).

 

E' possibile specificare che azione intraprendere a seguito del click sul pulsante di chiusura del JFrame in due modi:

  • mediante il metodo setDefaultCloseOperation(int type)   :    void ;
  • con un sistema più articolato - ma più flessibile - di gestione degli eventi.

 

 

In questo capitolo ci soffermeremo solo sul primo metodo: sarà sufficiente invocare

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

utilizzando, quindi, come parametro la costante predefinita 'EXIT_ON_CLOSE' (appunto, 'esci dopo la chiusura') per terminare l'applicazione alla chiusura del JFrame.

 

Altre possibili costanti predefinite da utilizzare con tale metodo sono:

DO_NOTHING_ON_CLOSE Non effettua alcuna operazione; in questo modo, l'evento verrà gestito da un apposito gestore degli eventi, in genere per effettuare azioni più articolate.
HIDE_ON_CLOSE Dopo aver invocato eventuali gestori degli eventi associati al JFrame da lanciare in caso di click sul pulsante di chiusura dello stesso, nasconde il JFrame.
DISPOSE_ON_CLOSE Nasconde e, dopo aver invocato eventuali gestori degli eventi associati al JFrame da lanciare in caso di chiusura dello stesso, chiude il JFrame.

 

Un altro argomento legato a quello dei JFrame da trattare in questo capitolo è quello del Toolkit (lett.: 'cassetta degli attrezzi').

 

Un Toolkit è un oggetto AWT particolare che ci permette di ottenere informazioni sulle caratteristiche del dispositivo sul quale viene eseguita l'applicazione.

 

Per ottenere un'istanza di tale oggetto è necessario invocarne il metodo statico:

getDefaultToolkit() .

 

Tra i tanti metodi di Toolkit (elencati nella pagina web delle API ufficiali di tale classe) ci interessa, in particolare, il seguente:

getScreenSize()   :   Dimension;

che restituisce le informazioni sulla larghezza e l'altezza del display (in pixel), depositandole in un oggetto Dimension, che a sua volta mette a disposizione i metodi getHeight() e getWidth() per restituire, sotto forma di valori double, larghezza e altezza.

 

Per mostrare a video il JFrame, utilizzare il metodo di JFrame:

setVisible(boolean b)   :   void

con b con valore true per visualizzare il JFrame, false per renderlo invisibile (resterà aperto e attivo, ma invisibile).

 

A questo punto abbiamo tutto ciò che ci serve per creare un 'JFrame minimo'; la seguente porzione di codice definisce una classe provvista di main (e, quindi, compilabile ed eseguibile così com'è) che estende JFrame; vengono presentati alcuni metodi (tutti dal significato ovvio) per impostare alcune caratteristiche del JFrame e mostrarlo a video, posizionato al centro dello stesso.

 

Sarà possibile chiudere il JFrame e terminare l'intera applicazione cliccando sul pulsante di chiusura della finestra.

 

Ecco il codice:

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


public class ProvaJFrame extends JFrame
{
public ProvaJFrame()
{
this.setTitle("Esempio di JFrame");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Toolkit mioToolkit = Toolkit.getDefaultToolkit();
Dimension dimensioniSchermo = mioToolkit.getScreenSize();

int larghezzaFrame, altezzaFrame;
larghezzaFrame = (int) (dimensioniSchermo.getWidth()/2);
altezzaFrame = (int) (dimensioniSchermo.getHeight()/2);

this.setSize(larghezzaFrame, altezzaFrame);

// NOTA IMPORTANTE: l'origine del sistema di riferimento dello schermo (punto (0,0)) è situata IN ALTO A SINISTRA; valori y positivi 'scendendo', x positivi proseguendo 'verso destra'.
this.setLocation(((int)dimensioniSchermo.getWidth()/4), ((int)dimensioniSchermo.getHeight()/4));
}


public static void main(String[] args)
{
ProvaJFrame pjf = new ProvaJFrame();
pjf.setVisible(true);
}
}

 

 
Vai all'inizio della pagina