PROVA FINALE Ingegneria del software

Documenti analoghi
Alessandro De Luca. Lezione, 13 maggio 2015

Programmazione Java: Interfacce grafiche (GUI)

L interfaccia grafica in Java

L Abstract Windowing Toolkit. Le GUI in Java. Il Frame. Cenni sull ereditarietà. Gianpaolo Cugola - Sistemi Informativi in Rete

I Layout Manager di java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Programmazione in rete e laboratorio

La nostra finestra dovrebbe essere come mostra la figura: Diamo innanzitutto un occhiata alle componenti principali di input/output:

Classi astratte. Master in Web Technology e Security luglio - settembre Interfacce

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

Eventi di azione. // con interfaccia per eventi di azione

Programmazione ad Oggetti. JFrame è la classe di base per le finestre Fornisce tutte le caratteristiche di una finestra vuota

Interfacce grafiche. Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini...

L interfaccia grafica con Java

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Introduzione al package grafico Swing

Riassunto. GUI in Java con l AWT 1. Cos è una GUI. Oggi: GUI in Java, l AWT. GUI in Java. Un esempio. Stefano Mizzaro 1

Esercitazione n 6. Capacità di analisi e di estensione di progetti Componenti grafici e gestione di eventi Linguaggio Java:

Marco Faella Elementi di programmazione di interfacce Grafiche. Il pattern OBSERVER.

Principi di base della programmazione di interfacce grafiche in Java

Sviluppo di Interfacce Grafiche in Java

Riassunto. GUI in Java con l AWT 1. Oggi: GUI in Java, l AWT. Oggi. GUI in Java. Cos è una GUI. Stefano Mizzaro 1

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

Gestione di eventi ed interfacce utente grafiche

In alcune applicazioni è necessario mostrare le informazioni in formato tabellare. Mario Bianchi Via Roma, /

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

Programmazione ad Eventi

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercitazione del Corso di Informatica Grafica. Strumenti per scrivere applicazioni in JAVA

Interazioni col mondo: eventi

Programmazione ad Eventi

GUI e java swing. Elmenti della GUI. Eventi e listener contenitori componenti layout manager. caratteristiche speciali

Concorrenza e sincronizzazione

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1

Grafica swing in Java

maggio 2004 Stefano Sanna - gerda@crs4.it

Swing. Swing 1. Java e la grafica Java permette di realizzare agevolmente applicazioni grafiche Package java.awt

Java GUI. Swing Java

Thread e Concorrenza in Java Swing

Threads e Concorrenza in Java Swing

Progettazione e Sviluppo di Interfacce Grafiche con Java Swing

Introduzione. Java. G. Prencipe

Scope e visibilità per classi

23 - Graphical User Interface GUI (Cenni)

GRAFICA ED EVENTI SWING, AWT e JavaFX

Programmazione in Java e gestione della grafica. Lezione 19

Campo Minato. in java

Transcript:

PROVA FINALE Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Laboratorio N 3

Cosa faremo oggi 2 Interfaccia grafica e SWING Lettura e scrittura di Files di properties Internazionalizzazione del codice

Swing 3 Swing è l evoluzione di AWT (Abstract Windowing Toolkit) e contrariamente a quest ultima non utilizza il SO per disegnare ma Java quindi è multipiattaforma Cambiamo prospettiva e ragioniamo ad eventi! Occorrenza dell evento A Occorrenza dell evento B Realtà Applicazione Osservatori Notifica dell evento A Notifica dell evento B Ascoltatore evento A Ascoltatore evento A listeners Ascoltatore evento B

Swing \2 4 Swing implementa il paradigma MVC (Model View Controller). Separate sempre i dati, visualizzazione e logica applicativa; rendeteli il più possibile indipendenti. Un interfaccia Swing ha tre elementi fondamentali: Contenitori Elementi grafici Eventi

Swing - Contenitori 5 Top level containers General purpose containers

Swing Contenitori \ 2 6 Special purpose containers

Swing - Elementi grafici 7 Elementi grafici di base

Swing - Elementi grafici \ 2 8 Elementi grafici non editabili Elementi grafici con contenuto formattato

Swing - Primo esempio 9 Primo esempio: JFrame + JLabel import java.awt.dimension; import javax.swing.*; public class SwingTest { private static void createandshowgui() { JFrame frame = new JFrame("Swing Test"); frame.setpreferredsize(new Dimension(300, 100)); frame.setdefaultcloseoperation(jframe.exit_on_close); JLabel label = new JLabel("Ciao sono una Swing JLabel"); frame.getcontentpane().add(label); frame.pack(); frame.setvisible(true); public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); );

Swing - Eventi 10 Ogni evento ha un proprio Listener (gestore), consultate i Javadocs http://download.oracle.com/javase/6/docs/api/index.html?javax/swing/e vent/package-summary.htm

Swing - Layout 11 Esistono diversi tipi di Layout Manager: BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout GridLayout GroupLayout SpringLayout Gli esempi li trovate al sito: http://download.oracle.com/javase/tutorial/uiswing/layout/index.html

Swing - Secondo esempio 12 Secondo esempio: Eventi + Layout import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingTest2 extends JPanel implements ActionListener { private static final String NUMEROCL = "Numero di pressioni "; protected JButton bottone; protected JLabel textlabel; protected Integer numclick; public SwingTest2() { numclick = 0; textlabel = new JLabel(NUMEROCL + numclick); add(textlabel); bottone = new JButton("Cliccami o premi Alt"); bottone.setverticaltextposition(abstractbutton.center); bottone.sethorizontaltextposition(abstractbutton.center); bottone.setmnemonic(keyevent.vk_alt); bottone.addactionlistener(this); bottone.settooltiptext("clicca il bottone o premi Alt"); add(bottone);

Swing - Secondo esempio \ 2 13 public void actionperformed(actionevent e) { numclick++; textlabel.settext(numerocl + numclick); private static void createandshowgui() { JFrame frame = new JFrame("Swing Test 2"); frame.setpreferredsize(new Dimension(200, 100)); frame.setdefaultcloseoperation(jframe.exit_on_close); SwingTest2 contentpane = new SwingTest2(); contentpane.setopaque(true); contentpane.setlayout(new FlowLayout(FlowLayout.CENTER)); frame.setcontentpane(contentpane); frame.pack(); frame.setvisible(true); public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); );

Swing - Terzo esempio 14 Secondo esempio: Inner (o Nested) Class import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingTest3 extends JPanel { private static final String NUMEROCL1 = "Numero di perssioni bottone uno: "; private static final String NUMEROCL2 = "Numero di perssioni bottone due: "; protected JButton bottone1, bottone2; protected JLabel textlabel, textlabe2; protected Integer numclick1, numclick2; private static void createandshowgui() { JFrame frame = new JFrame("Swing Test 3"); frame.setpreferredsize(new Dimension(300, 200)); frame.setdefaultcloseoperation(jframe.exit_on_close); SwingTest3 contentpane = new SwingTest3(); contentpane.setopaque(true); contentpane.setlayout(new FlowLayout(FlowLayout.CENTER)); frame.setcontentpane(contentpane); frame.pack(); frame.setvisible(true);

Swing - Terzo esempio \ 2 15 public SwingTest3() { numclick1 = 0; textlabel = new JLabel(NUMEROCL1 + numclick1); add(textlabel); bottone1 = new JButton("Cliccami"); bottone1.setverticaltextposition(abstractbutton.center); bottone1.sethorizontaltextposition(abstractbutton.center); bottone1.addactionlistener(new Button1Listener()); bottone1.settooltiptext("clicca il bottone"); add(bottone1); numclick2 = 0; textlabe2 = new JLabel(NUMEROCL2 + numclick2); add(textlabe2); bottone2 = new JButton("Cliccami"); bottone2.setverticaltextposition(abstractbutton.center); bottone2.sethorizontaltextposition(abstractbutton.center); bottone2.addactionlistener(new Button2Listener()); bottone2.settooltiptext("clicca il bottone"); add(bottone2);

Swing - Terzo esempio \ 3 16 public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); ); class Button1Listener implements ActionListener{ public void actionperformed(actionevent e) { numclick1++; textlabel.settext(numerocl1 + numclick1); class Button2Listener implements ActionListener{ public void actionperformed(actionevent e) { numclick2++; textlabe2.settext(numerocl2 + numclick2);

Swing - Esercizio 17 Creare un piccolo programma per giocare a Morra cinese Il programma presenterà all utente tre bottoni sasso, carta e forbici ed estrarrà la scelta del computer decretando la patta o la vittoria del computer o dell utente.

Files di Properties 18 I files di properties sono dei particolari file nella struttura chiave=valore utili a contenere dei parametri di configurazione La loro gestione avviene attraverso la classe java.util.properties che estende la classe Hashtable Esempio di file di properies (esempio.properties ) bottone.tooltip=clicca il bottone bottone.name=cliccami

Files di Properties - Esempio 19 public static void main(string[] args) throws Exception { //Creo l istanza della classe Properties Properties propertiesdiesempio = new Properties(); FileInputStream input = new FileInputStream("esempio.properties"); propertiesdiesempio.load(input); //Leggo le Properties input.close(); //Leggo il valore con chiave bottone.name String name = propertiesdiesempio.getproperty("bottone.name"); //Modifico il valore con chiave bottone.name propertiesdiesempio.setproperty("bottone.name", Clicca qui"); FileOutputStream out = new FileOutputStream("esempio.properties"); //Salvo le Properties aggiornate propertiesdiesempio.store(out, "--- Configurazioni SWING ---"); out.close();

Internazionalizzazione 20 L internazionalizzazione del codice si basa sull estenalizzazione delle stringhe in speciali files di properties chiamati ResourceBundle La particolarità di questi file è quella di essere tipizzati da un suffisso che rappresenta il Locale (lingua + paese) del contenuto del file Il software leggerà il ResourceBundle in base al Locale in uso e utilizzerà le stringhe in esso contenute

ResourceBundle 21 È sempre necessario definire un default ResourceBundle. myappi18n.properties stringa.saluta=ciao stringa.comeva=come va? stringa.tuonome=come ti chiami? Definiamo inoltre un ResourceBundle per ogni lingua che si vuole gestire (esempio inglese USA) myappi18n_en_us.properties stringa.saluta=hi stringa.comeva=how are you?

Esempio - ResourceBundle 22 public static void main(string[] args) { //Setto il locale a italiano (_it) Locale locale = Locale.ITALIAN; //Leggo il ResourceBundle ResourceBundle mess = ResourceBundle.getBundle("i18n.myAppI18N",locale); System.out.println(mess.getString("stringa.saluta")); System.out.println(mess.getString("stringa.comeva")); System.out.println(mess.getString("stringa.tuonome")); //Setto il locale a inglese USA (_en_us) locale = new Locale("en", "US"); messages = ResourceBundle.getBundle("i18n.myAppI18N",locale); System.out.println(mess.getString("stringa.saluta")); System.out.println(mess.getString("stringa.comeva")); System.out.println(mess.getString("stringa.tuonome"));