JAVA Interfacce grafiche per Applicazioni ed Applet

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "JAVA Interfacce grafiche per Applicazioni ed Applet"

Transcript

1 JAVA Interfacce grafiche per Applicazioni ed Applet Andrea BEI

2 Programmazione a finestre In JAVA è possibile sviluppare 2 tipi di programmi a finestre: APPLICAZIONI: Una Applicazione è un programma stand-alone che può accedere alle risorse della macchina su cui viene eseguito. APPLET: Una Applet è un programma che viene eseguito all interno di un browser e non può accedere alle risorse della macchina su cui gira il browser. Il byte-code di una Applet risiede sul Server WEB e viene scaricato ed eseguito dal Client quando il Browser interpreta l istruzione HTML <APPLET > Web Browser (Client) Web server (Server) Interpreta HTML Esegue Applet Internet Ospita: pagine HTML byte-code delle APPLET

3 JFC (Java Foundation Class): comprende un insieme di package per lo sviluppo di interfacce grafiche (GUI). JFC si può utilizzare in due ambienti JDK1.1.8+Swing1.1.1 (o precedenti es: Swing1.0.3) JDK1.2 (in cui le JFC sono integrate) JFC contiene principalmente: JFC/Swing Componenti Swing Componenti grafici tipici delle GUI: bottoni, menù pull down, tabelle ecc.. Sono una evoluzione dei componenti AWT (Abstract Window Toolkit) in quanto:» sono stati implementati senza ricorrere a codice nativo;» estendono le funzionalità dei componenti AWT (non sono il massimo comun denominatore tra tutte le piattaforme Java-compatibili). Supporto per diversi Look & Feel: Java,Windows,Unix, sviluppati da terze parti Java 2D API (solo JDK 1.2): immagini, grafici, testo in applicazioni ed applet. Supporto Drag & Drop (solo JDK 1.2): tra applicazioni Java e applicazioni native.

4 Le classi di Swing I componenti (classi) Swing sono suddivisi in 5 famiglie: 1 Contenitori top-level: Contenitori di altri componenti. I principali sono JFrame e JApplet. JFrame 2 Contenitori intermedi: JScrollPane JTabbedPane JSplitPane JToolBar

5 3 Controlli Base: Le classi di Swing JMenuBar JMenu JMenuItem JComboBox JCheckButton JTextField JRadioButton JButton JSlider JList

6 4 Display non editabili Le classi di Swing JLabel JProgressBar 5 Display editabili JTextArea

7 Component Swing: la gerarchia delle classi Container Panel Applet JApplet Window Frame JFrame JComponent AbstractButton JButton JSlider JToggleButton Package awt JToolBar JMenuItem JMenu Package Swing JTextComponent JTextField JScrollPane JTextArea JMenuBar JSplitPane JComboBox

8 Le classi di AWT da cui eredita Swing Metodo void setfont( Font ) Component Funzione Imposta il font per il testo contenuto nell oggetto Component. void setbounds( x, y, w, h) void setname( String ) void setvisible( boolean ) void setsize(w,h) Imposta posizione (x,y) e dimensioni (w,h) del componente. Imposta il nome del componente. Rende visibile o invisibile il componente. Imposta la dimensione del componente (w=larghezza.,h=altezza). Metodo void add( Component ) void remove ( Component ) void setlayout( LayoutManager ) Container Funzione Aggiunge un componente visuale. Rimuove un componente visuale. Imposta un layout tramite un layout manager.

9 Le classi di Swing 1 Contenitori top-level: Metodo JFrame, JFrame( String ) void setcontentpane( Container ) Container getcontentpane( ) JFrame Funzione Crea un frame invisibile. Per visualizzarlo si deve invocare setvisible(true). Imposta il ContentPane che contiene i componenti visibili del Frame. Restituisce il ContentPane. void setjmenubar( JMenuBar ) JMenuBar getjmenubar() Imposta il Menu Bar. Restituisce il Menu Bar.

10 Le classi di Swing 2 Contenitori intermedi: JScrollPane Metodo JScrollPane(), JScrollPane( int H,int V ), JScrollPane( Component ), JScrollPane( Component, int H, int V) void setviewportview( Component ) void setverticalscrollbarpolicy(int) void sethorizontalscrollbarpolicy(int) Funzione Crea un oggetto JScrollPane che visualizza il componente ( Component ) con le politiche di scrolling orizzontale (H) e verticale (V). Imposta l oggetto che deve essere visualizzato dallo ScrollPane. La classe ScrollBarConstants definisce 3 possibili valori: VERTICAL_SCROLLBAR_AS_NEEDED VERTICAL_SCROLLBAR_ALWAYS VERTICAL_SCROLLBAR_NEVER. La classe ScrollBarConstants definisce 3 possibili valori: HORIZONTAL_SCROLLBAR_AS_NEEDED HORIZONTAL_SCROLLBAR_ALWAYS HORIZONTAL_SCROLLBAR_NEVER.

11 2 Contenitori intermedi: Le classi di Swing JSplitPane Metodo JSplitPane(), JSplitPane( int, boolean, Component, Component ) void setorientation( int ) int getorientation() void setdividersize(int) int getdividersize() void settop/bottomcomponent( Component ) void setleft/rightcomponent( Component ) Component gettop/bottomcomponent() Component getleft/rightcomponent() void setdividerlocation(double) void setdividerlocation(int) int getdividerlocation() void add(component) void remove( Component ) Funzione Crea un oggetto JSplitPane. Il parametro int indica l orientamento dello split (HORIZONTAL_SPLIT, VERTICAL_SPLIT). Il parametro boolean indica se lo SplitPane deve subire un repainting continuo quando l utente trascina il divisore. I parametri Component sono gli oggetti dello SplitPane. Imposta o restituisce l orientamento dello split con le costanti HORIZONTAL_SPLIT, VERTICAL_SPLIT definite in JSplitPane. Imposta o restituisce la dimensione, in pixel, del divisore. Imposta o restituisce il componente nella posizione indicata. Funzionano a prescindere dall orientamento Left e Top sono equivalenti e lo sono anche Right e Bottom Imposta o restituisce la posizione del divisore. Questa può essere data in percentuale (double) oppure in pixel (int). aggiunge il componente indicato allo SplitPane (l ordine è sinistra/alto, destra/basso). Rimuove il componente indicato dallo SplitPane.

12 Le classi di Swing 2 Contenitori intermedi: JTabbedPane Metodo JTabbedPane(), JTabbedPane(int) void addtab(string, Icon, Component, String) void inserttab(string, Icon, Component, String int) void remove(component) void removetabat(int) void setcomponentat(int) Component getcomponentat(int) int getselectedindex() Component getselectedcomponent() Funzione Crea un oggetto JTabbedPane. Il parametro int indica la posizione dei tabs: TOP,BOTTOM,LEFT,RIGHT (default TOP) Aggiunge un nuovo tab al TabbedPane il 1 argomento è il nome del tab il 2 l eventuale icona il 3 il componente visualizzato quando il tab è selezionato il 4 il tool tip text per il tab. I primi 4 parametri sono uguali a quelli del metodo precedente. Il 5 parametro è l indice in cui deve essere inserito il tab. Il primo Tab ha indice 0. Rimuove il tab relativo al componente Component o avente indice int Imposta o restituisce il componente in posizione int. Altri metodi analoghi ci sono per impostare icona, titolo e colori (sfondo e testo) Restituisce rispettivamente l indice e il componente del tab selezionato

13 Le classi di Swing 2 Contenitori intermedi: JToolBar Metodo JToolBar() Component add( Component ) void addseparator() Funzione Crea un oggetto JToolBar. Aggiunge un nuovo componente (in genere un JButton) al ToolBar. Aggiunge un separatore al ToolBar. void setfloatable(boolean) Indica se l utente può trascinare il toolbar su una finestra separata.

14 3 Controlli base Le classi di Swing JButton Metodo JButton( String, Icon ) JButton( String ) JButton( Icon ) JButton() void settext(string) String gettext() void seticon(icon) Icon geticon() void setpressedicon(icon) Icon getpressedicon() void setdisabledicon(icon) void getdisabledicon() void setrollovericon(icon) void getrollovericon() void setmnemonic(char) void getmnemonic() void addactionlistener( ActionListener ) ActionListener getactionlistener() Funzione Crea un oggetto JButton predisponendolo a visualizzare del testo (String) e/o una immagine (Icon). Imposta o restituisce il testo e l immagine visualizzati sul Jbutton. Imposta o restituisce l immagine che il JButton presenta in particolari condizioni: Pressed: quando il bottone è premuto Disabled: quano è disabilitato Rollover: quando è sorvolato dal puntatore del mouse. Imposta il carattere che alternativamente al mouse può essere usato per attivare le funzionalità legate al bottone. Imposta o restituisce l ActionListener legato al bottone.

15 Le classi di Swing 3 Controlli Base: JComboBox Metodo JComboBox(), JComboBox(Object []) Object getitemat(int) Object getselecteditem() void addactionlistener( ActionListener ) ActionListener getactionlistener() Funzione Crea un oggetto JComboBox inizializzandolo con la lista di oggetti rappresentata dal vettore. Restituisce rispettivamente l oggetto in posizione int e l oggetto attualmente selezionato. Aggiunge un ActionListener all oggetto. Quando l utente seleziona un item viene eseguito il metodo dell ActionListener chiamato actionperformed. Il secondo metodo restituisce l ActionListener associato all oggetto.

16 3 Controlli base Le classi di Swing JList Metodo JList(Object []) void setselectionmode( int ) int getselectionmode() Object[] getselectedvalues() Funzione Crea un oggetto JList inizializzandolo con la lista di oggetti rappresentata dal vettore. Imposta la modalità di selezione: SINGLE_SELECTION SINGLE_INTERVAL_SELECTION MULTIPLE_INTERVAL_SELECTION Definite nella classe ListSelectionModel. Restituisce gli oggetti selezionati. void addlistselectionlistener( ListSelectionListener) Aggiunge un ListSelectionListener all oggetto.

17 3 Controlli base Le classi di Swing JMenuBar Metodo JMenuBar() Funzione Crea un oggetto JMenuBar. JMenu add(jmenu) Aggiunge un nuovo menu all oggetto JMenuBar. JMenu Metodo JMenu() JMenu( String ) JMenuItem add (JMenuItem) JMenuItem add (String) void addseparator() void remove(jmenuitem) Funzione Crea un oggetto JMenu. La stringa viene visualizzata sopra il menu. Aggiunge un Item al menu rappresentato da un oggetto JMenuItem o da una stringa. Aggiunge una linea separatrice alla attuale fine del menu. Elimina dal menu l Item specificato.

18 3 Controlli base Le classi di Swing JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem Metodo JMenuItem() JMenuItem(String) JMenuItem(String,Icon) Funzione Crea un oggetto JMenuItem impostando testo (String) e immagine (Icon) da visualizzare. JCheckBoxMenuItem() JCheckBoxMenuItem(String,Icon,boolean) JRadioButtonMenuItem() JRadioButtonMenuItem(String,Icon,boolean) void setmnemonic(char) Crea un oggetto di tipo check box. I parametri String e Icon sono visualizzati vicino al checkbox. Il parametro boolean serve per l inizializzazione del check box (selezionato/non selezionato). Crea un oggetto di tipo radio button. I parametri String e Icon sono visualizzati vicino al radio button. Il parametro boolean serve per l inizializzazione del radio button (selezionato/non selezionato). Specifica un carattere per la navigazione veloce del menù tramite tastiera. void addactionlistener(actionlistener) Associa un ActionListener al JMenuItem / JCheckBoxMenuItem / JRadioButtonMenuItem.

19 3 Controlli base Le classi di Swing JSlider Metodo JSlider() JSlider(int orientamento, int min, int max, int value) void setmajortickspacing(int) void setminortickspacing(int) void addchangelistener(changelistener) Funzione Crea un oggetto JSlider. Il parametro orientamento può essere JSlider.HORIZZONTAL o Jslider.VERTICAL. Gli altri parametri sono rispettivamente il minimo, il massimo e il valore iniziale. Imposta il passo delle scale graduate. Minor per la scala a granularità più fine Major per la scala a granularità meno fine. Associa un ChangeListener al JSlider. boolean getvalueisadjiusting() Indica se l utente ha terminato di modificare lo slider

20 4 Display non editabili Le classi di Swing JLabel Metodo JLabel() JLabel(Icon,String,int) void seticon(icon) Icon geticon() void settext(string) String gettext() void seticontextgap(int) int geticontextgap() Funzione Crea un oggetto JLabel. I parametri Icon e String sono rispettivamente l immagine ed il testo della Label. Il parametro int specifica l allineamento orizzontale LEFT, CENTER, RIGHT. Imposta e restituisce l immagine o il testo associato alla JLabel. Imposta o restituisce il numero di pixel di distanza tra immagine e testo. JProgressBar Metodo JProgressBar() JProgressBar(int orientation,int min, int max) void setvalue(int) int getvalue() Funzione Crea un oggetto JProgressBar che definisce un intervallo esteso tra il parametro min e il parametro max con orientamento che può essere JProgressBar.HORIZONTAL o JProgressBar.VERTICAL Imposta e restituisce il valore corrente del ProgressBar.

21 5 Display editabili Le classi di Swing JTextArea Metodo JTextArea() JTextArea(String) JTextArea(int righe,int colonne) void append(string) void replacerange(string, int start, int end) void insert(string, int pos) Funzione Crea un oggetto JTextArea. Il parametro String specifica il testo iniziale. I parametri int righe e colonne. Aggiunge al testo corrente la stringa specificata Sostituisce il testo da start a end con la stringa specificata. Inserisce la stringa String a partire dalla posizione pos.

22 Esempio di interfaccia grafica Finestra con due componenti JTextArea e JTextField rispettivamente per l input e l output utente. Oggetto della classe JTextArea per l output dei risultati Oggetto della classe JTextField per l input dei dati

23 Esempio di interfaccia grafica: il codice import javax.swing.*; import java.awt.*; class Applicazione extends JFrame { private static final int H=400; private static final int W=300; private JTextField input; private JTextArea output; public Applicazione() { Container contentpane=getcontentpane(); contentpane.setlayout(null); setsize(w,h); Font font=new Font("Monospaced",Font.PLAIN,12); // aggiungo al frame il componente visuale input input=new JTextField(); input.setbounds(10,h-50,w-20,40); input.setfont( font ); contentpane.add(input); // aggiungo al frame il componente visuale output output=new JTextArea(10,40); output.setfont( font ); JScrollPane ScrollPane = new JScrollPane(output); ScrollPane.setBounds(10,30,W-20,H-100); contentpane.add(scrollpane); }} class GUI { public static void main ( String args[] ) { (new Applicazione()).setVisible(true) } } N.B. per le versioni di Swing precedenti la 1.1 Beta 3 occorre scrivere: import com.sun.java.swing.*; invece di import javax.swing.*;

24 Oggetti Listener Gli oggetti di tipo Listener si pongono in ascolto delle interazioni dell utente con l interfaccia grafica ( pressione di un bottone, apertura di una finestra ecc.) I metodi di un oggetto Listener svolgono il ruolo di funzioni call-back ovvero di parti di codice che vengono elaborate in risposta alle interazioni utente Una volta definito un componente visuale occorre nominare un suo Listener. I metodi dell oggetto Listener si occuperanno di elaborare i tipi diversi di interazione che l utente può avere con il componente visuale Una lista parziale di interazioni con componenti visuali è selezione di una opzione da applicazione o applet aprire o chiudere una finestra inserire testo in un oggetto spostare il fuoco da un componente all altro premere un bottone per ognuna di queste interazioni è possibile avere una o più funzioni call-back associate

25 Nomina del Listener di un componente visuale Per nominare il listener di un componente visuale occorre: Creare un oggetto listener L che implementi l interfaccia: interface ActionListener { public void actionperformed( ActionEvent e ); } il metodo actionperformed deve essere implementato con il codice da eseguire in risposta all interazione utente con il componente visuale Nominare l oggetto L come Listener di un oggetto visuale CV CV.addActionListener(L) Es: class Transazione implements ActionListener { // dichiaro il Listener Transazione public void actionperformed(actionevent e) { // codice da eseguire quando l utente termina l inserimento } }... Private JTextField input=new JTextField(); // creo il componente visuale input Private Transazione cb=new Transazione(); // creo il Listener cb input.addactionlistener(cb); // Nomino cb come Listener di input

26 Esempio: Gestione deposito bancario L interfaccia grafica è costituita da due sezioni JTextField e JTextArea. Le operazioni sono: Deposito: D <cifra da depositare> es: D 200 Prelievo: P <cifra da prelevare> es: P 100 Estratto E Clear: C

27 Gestione deposito bancario: UML L applicazione è costituita da 5 classi JTextArea: componente visuale per l output JTextField: componente visuale per l input Applicazione: eredita dalla classe JFrame. L oggetto Applicazione è il contenitore degli altri componenti visuali Transazione: è il Listener dell oggetto JTextField. Esegue la transazione dopo che l utente ha inserito il comando relativo nell area JTextField Conto: è la classe che gestisce il deposito bancario Applicazione JTextArea JTextField Transazione Conto

28 Gestione deposito bancario: Applicazione Import javax.swing.*; import java.awt.*; import java.awt.event.*; import Conto; class Applicazione extends Frame { private static final int H=400; private static final int W=300; private JTextField input; private JTextArea output; private Conto C; // in questo punto dichiaro la classe // Transazione (classe annidata) private Transazione cb; public Applicazione() { // creo Transazione: il Listener di JTextField cb=new Transazione(); c=new Conto(); Container CPane=getContentPane(); CPane.setLayout(null); setsize(w,h); Font font=newfont("monospaced",font.plain,12); input=new TextField(); input.setbounds(10,h-60,w-25,30); input.setfont( font ); // Nomino il Listener di JTextField input input.addactionlistener(cb); CPane.add(input); output=new TextArea(10,30); output.setfont( font ); JScrollPane ScrollPane = new JScrollPane(output); ScrollPane.setBounds(10,30,W-25,H-100); CPane.add(ScrollPane); } }

29 Gestione deposito bancario: Transazione class Transazione implements ActionListener { public void actionperformed( ActionEvent e ) { int importo=0; String str_input=input.gettext(); input.settext(""); char operazione = str_input.charat(0); if (operazione == P operazione == D ) { String str= str_input.substring(2); importo=(integer.valueof(str)).intvalue();} switch (operazione) { case D : C.Deposito(importo); output.append("deposito: "+importo+"\n"); break; case P : C.Prelievo(importo); output.append("prelievo: "+importo+"\n"); break; case E : int est=c.estratto(); output.append("estratto: "+est+"\n"); break; case C : output.settext(""); break; default: output.append(operazione+ " - Errore\n"); } } }

30 Gestione deposito bancario: Conto e Main class Conto { int importo; public Conto() { importo=0; } public void Deposito(int dep) { importo=importo+dep; } public void Prelievo(int pre) { importo=importo-pre; } Import Applicazione; Class Main { public static void main(string arg[]) { (new Applicazione).setVisible(true); } } public int Estratto() { return importo; } }

31 Gestione deposito bancario con menù Il menù a barra è implementato da JMenuBar Gli Item sono implementati da JMenuItem I menù pull-down sono implementati da JMenu

32 Gestione deposito bancario con menù Import javax.swing.*; import java.awt.*; import java.awt.event.*; import Conto; class ApplicazioneMenu extends JFrame { private static final int H=400; private static final int W=300; private JTextField input; private JTextArea output; private Conto C; private Container CPane; // in questo punto dichiaro la classe // Transazione (classe annidata) private Transazione cb; public ApplicazioneMenu() { cb=new Transazione(); C=new Conto(); CPane=getContentPane(); CPane.setLayout(null); setsize(w,h); Font font=new Font("Monospaced",Font.PLAIN,12); JMenuBar menu_a_barra=new JMenuBar(); JMenu menu1=new JMenu("Transazione"); menu1.setmnemonic( T ); JMenuItem menuitem = new JMenuItem("Prelievo"); menuitem.addactionlistener(cb); menu1.add(menuitem); menuitem = new JMenuItem("Deposito", new ImageIcon("images/middle.gif")); menuitem.addactionlistener(cb); menu1.add(menuitem); menu1.addseparator(); menuitem = new JMenuItem("Estratto", new ImageIcon("images/2cents.gif")); menuitem.addactionlistener(cb); menu1.add(menuitem); menu_a_barra.add(menu1); // continua.

33 Gestione deposito bancario con menù JMenu menu2=new JMenu("Sistema"); menu2.setmnemonic( S ); menuitem = new JMenuItem("Clear",new ImageIcon("images/middle.gif")); menuitem.addactionlistener(cb); menu2.add(menuitem); menu_a_barra.add( menu2 ); setjmenubar(menu_a_barra); output=new JTextArea(10,30); output.setfont( font ); JScrollPane ScrollPane = new JScrollPane(output); ScrollPane.setBounds(10,10,W-25,H-100); CPane.add(ScrollPane); }}

34 Gestione deposito bancario con menù class Transazione implements ActionListener { // in questo punto dichiaro le classi // Transaz_dep e Transaz_pre Transaz_dep cb_dep=new Transaz_dep(); Transaz_pre cb_pre=new Transaz_pre(); public void actionperformed( ActionEvent e ) {JMenuItem source=(jmenuitem) (e.getsource()); String comando=source.gettext(); if (comando.equals("deposito") comando.equals("prelievo")) { input=new JTextField(); input.setbounds(10,h-85,w-25,30); if (comando.equals("deposito")) input.addactionlistener( cb_dep ); else input.addactionlistener( cd_pre ); CPane.add(input); CPane.repaint() } if (comando.equals("estratto")) output.append("estratto: "+C.Estratto()); if (comando.equals("clear")) output.settext(""); }} class Transaz_dep implements ActionListener { public void actionperformed(actionevent e) { String str_importo= input.gettext(); int importo= (Integer.valueOf(str_importo)).intValue(); C.Deposito(importo); output.append("deposito : "+importo+"\n"); CPane.remove(input); CPane.repaint(); }} class Transaz_pre implements ActionListener { public void actionperformed(actionevent e) { String str_importo= input.gettext(); int importo= (Integer.valueOf(str_importo)).intValue(); C.Prelievo(importo); output.append("prelievo : "+importo+"\n"); CPane.remove(input); CPane.repaint() }}

35 Gestione Deposito Bancario con JButton

36 Gestione Deposito Bancario con JButton Import javax.swing.*. import java.awt.*; import java.awt.event.*; import Conto; class Applicazione extends Frame { private static final int H=400; private static final int W=300; private JTextField input; private JTextArea output; private Conto C; // in questo punto dichiaro la classe // Transaz_dep, Transaz_pre, // Transaz_est public Applicazione() { C=new Conto(); Container CPane=getContentPane(); CPane.setLayout(null); setsize(w,h); Font font=new Font("Monospaced",Font.PLAIN,12); input=new JTextField(); input.setbounds(10,h-70,w-20,40); input.setfont( font ); CPane.add(input); output=new TextArea(10,40); output.setfont( font ); JScrollPane SP = new JScrollPane(output); SP.setBounds(10,30,W-20,H-160); CPane.add(SP); // creo il Bottone Deposito JButton dep=new JButton("Deposito"); dep.setbounds(10,h-120,w/3-15,40); dep.addactionlistener(new Transaz_dep()); // creo il Bottone Prelievo JButton pre=new JButton("Prelievo"); pre.setbounds(w/3+10,h-120,w/3-15,40); pre.addactionlistener(new Transaz_pre()); // creo il Bottone Estratto JButton est=new JButton("Estratto"); est.setbounds(w/3*2+10,h-120,w/3-15,40); est.addactionlistener(new Transaz_est()); // aggiungo i bottoni alla finestra CPane.add(pre); CPane.add(dep); CPane.add(est); }}

37 Gestione Deposito Bancario con JButton class Transaz_pre implements ActionListener { public void actionperformed( ActionEvent e ) { String str_importo=input.gettext(); input.settext(""); int importo= (Integer.valueOf(str_importo)).intValue(); C.Prelievo(importo); output.append("prelievo : "+importo+"\n"); }} class Transaz_est implements ActionListener { public void actionperformed( ActionEvent e) { input.settext(""); output.append("deposito: +C.Estratto()+"\n ); } } class Transaz_dep implements ActionListener { public void actionperformed( ActionEvent e ) { String str_importo=input.gettext(); input.settext(""); int importo= (Integer.valueOf(str_importo)).intValue(); C.Deposito(importo); output.append("deposito : "+importo+"\n"); }}

38 Applet Una Applet JAVA è una applicazione che può essere eseguita solo su un browser o su un appletviewer Viene scaricata dal WEB server ed eseguita in locale Per questioni di sicurezza non può accedere alle risorse locali (tranne ovviamente CPU e RAM) E realizzabile dichiarando una classe che eredita dalla classe Applet (o JApplet per usare i componenti Swing) Viene invocata da una pagina HTML tramite il TAG <APPLET..>

39 Metodi della classe Applet Le classi Applet e JApplet init(): viene invocato quando la Applet viene scaricata dal Web server start(): fa partire l esecuzione della Applet stop(): interrompe l esecuzione della Applet destroy(): distrugge la Applet sul Client getcodebase(): restituisce la URL relativa alla Applet getparameter( str ): restituisce il valore del parametro str passato alla Applet Invocazione dei Metodi da parte del Browser La pagina Web che ospita l applet è caricata: init(),start() La pagina Web è sostituita da un altra: stop() La pagina Web è rivisualizzata (back o forward): start() La pagina Web viene ricaricata (refresh): stop(),destroy(),init(),start() La pagina Web viene rivisitata: init(),start() La classe JApplet eredita da Applet ed aggiunge alcuni metodi per la gestione dei componenti Swing. (getcontentpane, setcontentpane, getjmenubar, setjmenubar, setlayout ecc.)

40 Gestione deposito bancario: Applet Import javax.swing.*; import java.awt.*; import java.awt.event.*; import Conto; class AppletBanca extends JApplet { private static final int H=400; private static final int W=300; private JTextField input; private JTextArea output; private Conto C; // in questo punto dichiaro la classe // Transazione (classe annidata) private Transazione cb; public void init() { // creo Transazione: il Listener del TextField cb=new Transazione(); c=new Conto(); Container CPane=getContentPane(); CPane.setLayout(null); setsize(w,h); Font font=newfont("monospaced",font.plain,12); input=new TextField(); input.setbounds(10,h-60,w-25,30); input.setfont( font ); CPane.add(input); // Nomino il Listener del TextField input input.addactionlistener(cb); output=new JTextArea(10,30); output.setfont( font ); JScrollPane ScrollPane = new JScrollPane(output); ScrollPane.setBounds(10,30,W-25,H-100); CPane.add(ScrollPane); } }

41 Applet: Invocazione e passaggio parametri Da una pagina Web si può invocare una applet tramite il tag HTML <APPLET..> es: <html> <head> <title> Gestione Deposito Bancario </title> </head> <body> <applet code="appletbanca.class" Width=300 height=400></applet> </body> </html> Il tag APPLET permette anche il passaggio di parametri <applet code="appletbanca.class" Width=300 height=400> <param name= deposito value= 200 > </applet> l invocazione del metodo getparameter( deposito ) dal metodo init della Applet restituirà il valore 200

42 Layout Manager Problema: Posizionamento e dimensionamento dei componenti visuali di una finestra in caso di resizing Soluzione: JAVA fornisce diversi Layout Manager che riorganizzano automaticamente i componenti visuali in una finestra riassegnando loro i parametri di posizione e dimensione in modo che la loro disposizione soddisfi un certo pattern proprio del Layout Manager I Layout Manager principali sono implementati dalle seguenti classi predefinite nel JDK java.awt.flowlayout java.awt.borderlayout java.awt.gridlayout

43 Java.awt.FlowLayout In caso di resizing della finestra fa scorrere nelle righe successive i componenti che non entrano più in una riga. Prima del resizing Dopo il resizing

44 Java.awt.FlowLayout I Metodi principali sono: FlowLayout(): crea un oggetto di tipo FlowLayout FlowLayout(hgap,vgap): crea un oggetto di tipo FlowLayout con un gap orizzontale hgap ed un gap verticale vgap setalignament( align ): imposta l allineamento (CENTER,LEFT,RIGHT) getalignament(): restituisce l allineamento sethgap(pixels): imposta il gap orizzontale tra componenti setvgap(pixels): imposta il gap verticale tra componenti

45 Java.awt.FlowLayout: esempio import javax.swing.*; import java.awt.*; class provalayout extends JFrame { public provalayout() { // creo l oggetto FlowLayout FlowLayout l=new FlowLayout(); Container CPane=getContentPane() CPane.setLayout(l); l.setalignment(l.right); setsize(200,300); JButton dep=new JButton("Deposito"); JButton pre=new JButton("Prelievo"); JButton est=new JButton("Estratto"); CPane.add(pre); CPane.add(dep); CPane.add(est);}} class layout { public static void main(string argv[]){ (new provalayout()).setvisible(true); } }

46 Java.awt.FlowLayout: esempio

47 Java.awt.BorderLayout Con questo layout la finestra viene suddivisa in 5 regioni: Nord, Sud, Est, Ovest,Centro. I componenti visuali definiti in una regione sono vincolati ad appartenere a tale regione anche in caso di resizing. I metodi forniti sono analoghi al FlowLayout. In questo caso non sono presenti i metodi relativi all allineamento dei componenti visuali. Prima del resizing Dopo il resizing NORD NORD OVEST CENTRO EST O C E SUD SUD

48 Java.awt.BorderLayout import javax.swing.*; import java.awt.*; class provalayout extends JFrame { private static final int H=200; private static final int W=300; public provalayout() { BorderLayout l=new BorderLayout(); Container CPane=getContentPane(); CPane.setLayout(l); setsize(w,h); JButton dep=new JButton("Deposito"); JButton pre=new JButton("Prelievo"); JButton est=new JButton("Estratto"); CPane.add(pre,BorderLayout.NORTH); CPane.add(dep,BorderLayout.SOUTH); CPane.add(est,BorderLayout.WEST); }} class layout { public static void main(string argv[]){ (new provalayout()).setvisible(true); } }

49 Java.awt.BorderLayout

50 Java.awt.GridLayout Con questo Layout Manager la finestra viene suddivisa in una matrice. Ad ogni componente visuale viene assegnata una cella della matrice. Ogni componente rimane nella propria cella anche in caso di resizing

51 Java.awt.GridLayout I metodi principali sono: GridLayout(righe,colone): crea un oggetti GridLayout di righe e colonne passate come parametro GridLayout(righe,colone,hgap,vgap): come il precedente ma definisce anche il gap orizzontale e verticale tra i componenti visuali getrows(): restituisce il numero di righe gethgap(): restituisce il gap orizzontale tra componenti getvgap(): restituisce il gap verticale tra componenti sethgap(pixels): imposta il gap orizzontale tra componenti setrows(righe): imposta il numero di righe set Vgap(pixels): imposta il gap verticale tra componenti

52 Java.awt.GridLayout import javax.swing.*; import java.awt.*; class provalayout extends JFrame { private static final int H=200; private static final int W=300; public provalayout() { GridLayout l=new GridLayout(2,2); Container CPane=getContentPane(); CPane.setLayout(l); l.sethgap(20); l.setvgap(20); setsize(w,h); JButton dep=new JButton("Deposito"); JButton pre=new JButton("Prelievo"); JButton est=new JButton("Estratto"); CPane.add(pre); CPane.add(dep); CPane.add(est); }} class layout { public static void main(string argv[]){ (new provalayout()).setvisible(true); } }

53 Java.awt.GridLayout