Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
La classe Component
In Java linterfaccia utente formata da due elementi principali: i contenitori; i componenti. Un contenitore pu contenere pi componenti. Un contenitore, insieme ai suoi componenti, pu essere visto come ununica entit e considerato come un componente speciale, cos da essere inserito in altri contenitori. Le classi per creare interfacce utente sono contenute nei package java.awt e javax.swing. Le classi Java che realizzano componenti e contenitori sono organizzate in una gerarchia che ha come padre la classe Component (classe astratta) del package java.awt.
Object
Component
public void setSize(int larghezza, int altezza) Imposta la larghezza e laltezza del componente; larghezza e altezza sono espressi in pixel.
public void setLocation(int ascissa, int ordinata) Posiziona il componente a partire dal punto di coordinate (ascissa, ordinata). Il vertice in alto a sinistra del componente coincide con il punto di coordinate specificate.
public void setBounds(int ascissa, int ordinata, int larghezza, int altezza) Combina i metodi setLocation e setSize, consentendo di impostare la posizione iniziale e la dimensione del componente con un'unica operazione.
public int getX() Restituisce l'ascissa della posizione iniziale del componente. public int getY() Restituisce l'ordinata della posizione iniziale del componente. public int getWidth() Restituisce la larghezza del componente. public int getHeight() Restituisce l'altezza del componente. public void setBackground(Color colore) Imposta il colore di sfondo del componente a quello specificato. Se il parametro null, il componente eredita il colore di sfondo del componente padre.
public Color getBackground() Restituisce il colore di sfondo del componente o del componente padre, nel caso non sia stato impostato in precedenza.
public void setForeground(Color colore) Imposta il colore in primo piano del componente a quello specificato. Se il parametro null, il componente eredita il colore in primo piano del componente padre.
public Color getForeground() Restituisce il colore in primo piano del componente o del componente padre, nel caso non sia stato impostato in precedenza.
public void setEnabled(boolean b) Se b=true, abilita il componente, altrimenti lo disabilita. Un componente abilitato pu rispondere allinput dellutente e genera eventi. I componenti vengono creati abilitati, per default.
public boolean isEnabled() Restituisce true se il componente abilitato; false altrimenti. public String toString() Restituisce una rappresentazione del componente sotto forma di stringa. Ridefinisce (overrides) il metodo toString della classe Object.
public void setFont(Font f) Imposta il font per il componente. protected String paramString() Restituisce una stringa che rappresenta il componente.
Component
Container
Obj ect
Component
Container
JComponent
Window
JPanel
Frame
JFrame
public void toBack() Se la finestra visibile la sposta in fondo allo stack delle finestre sul desktop e ridispone tutte le altre finestre.
public void toFront() Mostra la finestra in primo piano. public void setIconImage(Image img) Imposta limmagine specificata come icona per la finestra. La classe Window ridefinisce alcuni metodi della classe Component, come ad esempio: getBackground, setBackground, setBounds, setSize, setVisible.
public int getDefaultCloseOperation() Restituisce l'azione impostata come operazione di chiusura predefinita. public Container getContentPane() A differenza di quanto accade con la classe Frame, non possibile aggiungere direttamente un componente ad un'istanza di JFrame. Infatti, le finestre create con JFrame contengono al loro interno un certo numero di pannelli predefiniti, uno dei quali il pannello del contenuto (contentPane). Qualsiasi componente pu essere aggiunto direttamente solo a questo pannello predefinito. Il metodo getContentPane restituisce il riferimento (indirizzo) a tale pannello. La classe JFrame ridefinisce alcuni metodi della classe Window, come: paramString, remove, setIconImage.
package cinziabb.frameproj0; import javax.swing.JFrame; @SuppressWarnings("serial") public class MyFrame extends JFrame { //Costanti di public static public static public static public static classe final int final int final int final int WIDTH = 450; HEIGHT = 300; X = 100; Y = 100;
(1)
(2)
//Imposta le dimensioni setSize(WIDTH,HEIGHT); //Imposta la posizione iniziale setLocation(X,Y); /*In alternativa a setSize e setLocation: setBounds(X,Y,WIDTH,HEIGHT);*/ //Imposta l'azione corrispondente alla chiusura setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
(6)
(7) }
public static void main(String args[]) { MyFrame frame= new MyFrame(); frame.setVisible(true); }
(1) - Le costanti di classe WIDTH, HEIGHT, X e Y rappresentano rispettivamente la larghezza e laltezza del frame e le coordinate del suo vertice superiore sinistro. (2) - Il costruttore della classe MyFrame esegue una chiamata al costruttore della superclasse JFrame, specificando come parametro il titolo del frame: super("MyFrame"). In alternativa, possibile specificare il titolo con il metodo setTitle: setTitle("MyFrame"). Come vedremo, tutti i metodi che impostano la finestra devono essere chiamati all'interno del costruttore. (3) - Il metodo setSize imposta la dimensione del frame. (4) - Il metodo setLocation imposta la posizione iniziale del frame; la posizione, se non specificata, coincide con il punto origine degli assi. (5) - Al posto dei metodi setSize e setLocation si pu usare il metodo setBounds. (6) - La chiamata al metodo setDefaultCloseOperation imposta loperazione associata al pulsante di chiusura del frame. (7) - Tra i metodi della classe presente il metodo main: in tal modo possibile testare il funzionamento della classe, senza dover scrivere una specifica applicazione. Qualora si scriva invece, un'applicazione che utilizza la classe MyFrame, il metodo main presente nell'applicazione, prevarr su quello definito nella classe stessa. Una volta creata la finestra, questa non ancora visibile. Per visualizzarla occorre chiamare il metodo setVisible, passandogli come parametro true: frame.setVisible(true). La visualizzazione di una finestra deve avvenire dopo che tutte le impostazioni iniziali sono state applicate.
La classe JComponent
JComponent una classe astratta che definisce i componenti di una interfaccia utente, ad eccezione dei contenitori top-level. JComponent: ridefinisce alcuni metodi della classe Component, come: setVisible, setEnabled, setForeground, setBackground, getX, getY, getWidth, getHeight, paramString; eredita da Component (tra gli altri): getBackground, getForeground, isEnabled, isVisible, setBounds, setLocation, setSize, toString; ridefinisce alcuni metodi della classe Container, come: setFont.
Metodi utili della classe JComponent public void setToolTipText(String text) Imposta la stringa (tooltip string) che sar visualizzata quando il mouse verr posizionato sul componente. public String getToolTipText() Restituisce la tooltip string impostata per il componente.
Bocchi Cinzia Ultimo aggiornamento: 01/02/2013
package cinziabb.frameproj1; import import import import java.awt.Color; java.awt.Container; javax.swing.JFrame; javax.swing.JPanel;
(1)
//Variabili di istanza private JPanel panel; private Container contentPane; public MyFrame() { super("MyFrame"); //Imposta le dimensioni setSize(WIDTH,HEIGHT); //Imposta la posizione iniziale setLocation(X,Y); //Imposta l'azione corrispondente alla chiusura setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Creazione del pannello colorato panel = new JPanel(); panel.setBackground(Color.LIGHT_GRAY); //Inserimento del pannello colorato nel frame contentPane = getContentPane(); contentPane.add(panel); } public static void main(String args[]) { MyFrame frame= new MyFrame(); frame.setVisible(true); } }
(2)
(3)
(1) - Definiamo due variabili di istanza: panel, di tipo JPanel e contentPane, di tipo Container. (2) - Creiamo listanza di JPanel e impostiamo il colore di sfondo con il metodo setBackground: panel.setBackground(Color.LIGHT_GRAY). Si osservi che il colore di sfondo espresso mediante una costante della classe Color. Analizzeremo in seguito le caratteristiche di questa classe. (3) - Infine, otteniamo il riferimento al pannello del contenuto con il metodo getContentPane: contentPane = getContentPane() e aggiungiamo ad esso il pannello colorato: contentPane.add(panel). Osservazione: Non necessario, in questo caso, definire panel e contentPane come variabili di istanza. Si potrebbe, infatti, definire le suddette variabili come locali al costruttore, in questo modo: //Creazione del pannello colorato JPanel panel = new JPanel(); panel.setBackground(Color.LIGHT_GRAY);
(2)
10
(3)
//Inserimento del pannello colorato nel frame Container contentPane = getContentPane(); contentPane.add(panel);
La classe Toolkit
La classe astratta Toolkit fornisce una interfaccia verso la piattaforma in uso, consentendo di ottenere informazioni su, ad esempio, la dimensione di una finestra, i font disponibili, e cos via. Ogni piattaforma che supporta Java deve fornire una classe concreta che estende la classe Toolkit. Toolkit consente di risolvere i problemi di visualizzazione dovuti alle caratteristiche specifiche della piattaforma. Nonostante Java sia indipendente dalla piattaforma, pu capitare che a parit di bytecode, di sistema operativo e di JDK, linterfaccia utente appaia diversa. Questo problema dovuto alla risoluzione dello schermo che pu variare a seconda della scheda video in uso e in base alle preferenze dellutente. Per esempio, un frame di dimensioni 800x600 potrebbe essere troppo grande per uno schermo con risoluzione 640x480 e troppo piccolo per uno schermo con risoluzione 1024x768. La maggior parte dei metodi della classe Toolkit sono chiamati dal sistema, ma esistono alcuni metodi che risultano particolarmente utili e che, pertanto, andiamo ad analizzare di seguito.
public abstract Image getImage(URL url) Carica una immagine dallurl specificato. I formati immagine consentiti sono GIF, JPG e PNG.
11
Inoltre, utilizzeremo il metodo paramString per ottenere informazioni sul frame. package cinziabb.frameproj2; import import import import import import import java.awt.Color; java.awt.Container; java.awt.Dimension; java.awt.Image; java.awt.Toolkit; javax.swing.JFrame; javax.swing.JPanel;
12
@SuppressWarnings("serial") public class MyFrame extends JFrame { //Costanti di classe public static final int WIDTH = 450; public static final int HEIGHT = 300; //Variabili di istanza private JPanel panel; private Container contentPane; public MyFrame() { super("MyFrame"); //Imposta le dimensioni setSize(WIDTH,HEIGHT); //Ottiene le dimensioni dello schermo Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenWidth = screenSize.width; int screenHeight = screenSize.height; //Centra il frame nello schermo int x = (screenWidth - WIDTH) / 2; int y = (screenHeight - HEIGHT) / 2; setLocation(x, y); //Imposta l'azione corrispondente alla chiusura setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Aggiunge un'icona al frame Image img = kit.getImage(getClass().getResource("icon.gif")); setIconImage(img); //Creazione del pannello colorato panel = new JPanel(); panel.setBackground(Color.LIGHT_GRAY); //Inserimento del pannello colorato nel frame contentPane = getContentPane(); contentPane.add(panel);
(1)
(2)
(3)
public static void main(String args[]) { MyFrame frame= new MyFrame(); (4) } //Stampa una stringa con informazioni sul frame System.out.println(frame.paramString()); frame.setVisible(true); }
13
(1) - Il metodo statico getDefaultToolkit restituisce nella variabile kit il riferimento al default toolkit: Toolkit kit = Toolkit.getDefaultToolkit(). Il metodo getScreenSize restituisce un oggetto Dimension contenente le dimensioni dello schermo: Dimension screenSize = kit.getScreenSize(). Un oggetto Dimension ha due variabili di istanza pubbliche intere width e height che contengono rispettivamente la larghezza e laltezza dellelemento considerato. Di conseguenza, basta accedere ad esse in lettura per ottenere la larghezza e laltezza dello schermo: int screenWidth = screenSize.width; int screenHeight = screenSize.height. (2) - Ora che conosciamo altezza e larghezza dello schermo, facciamo un semplice calcolo per ottenere le coordinate del vertice superiore sinistro del frame e impostare la sua posizione iniziale con setLocation. (3) - La prima riga di codice Image img = kit.getImage(getClass().getResource("icon.gif")); consente di reperire una risorsa collocata allinterno dello stesso package di MyFrame. Nel dettaglio: getClass restituisce il tipo runtime delloggetto class cinziabb.frameproj2.MyFrame getResource restituisce lurl della risorsa che ha il nome specificato. La combinazione dei due metodi consente di ottenere: file:/C:/workspaceJunoJEE/FrameProject/bin/cinziabb/frameproj2/icon.gif che corrisponde alla effettiva collocazione della risorsa. Il metodo getImage crea loggetto Image a partire dal file immagine. Infine, il metodo setIconImage, imposta limmagine come icona della finestra. (4) - Il metodo paramString restituisce la stringa:
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
14