• Non ci sono risultati.

PROVA FINALE – Ingegneria del software

N/A
N/A
Protected

Academic year: 2021

Condividi "PROVA FINALE – Ingegneria del software"

Copied!
22
0
0

Testo completo

(1)

Ing. Jody Marca – jody.marca@polimi.it

Laboratorio N° 3

(2)

© 2015 – Jody Marca – Laboratorio numero 3

Cosa faremo oggi

Interfaccia grafica e SWING

Lettura e scrittura di Files di properties

Internazionalizzazione del codice

(3)

Swing

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

Osservatori

Realtà Applicazione

Ascoltatore evento A Ascoltatore

evento A

Ascoltatore evento B

Occorrenza dell’evento B

Notifica

dell’evento A Notifica dell’evento B

listeners

(4)

© 2015 – Jody Marca – Laboratorio numero 3

Swing \2

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

(5)

Swing - Contenitori

Top level containers

General purpose containers

(6)

© 2015 – Jody Marca – Laboratorio numero 3

Swing – Contenitori \ 2

Special

purpose

containers

(7)

Swing - Elementi grafici

Elementi grafici di base

(8)

© 2015 – Jody Marca – Laboratorio numero 3

Swing - Elementi grafici \ 2

Elementi grafici non editabili

Elementi grafici con contenuto formattato

(9)

Swing - Primo esempio

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();

} });

} }

(10)

© 2015 – Jody Marca – Laboratorio numero 3

Swing - Eventi

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

(11)

Swing - Layout

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

(12)

© 2015 – Jody Marca – Laboratorio numero 3

Swing - Secondo esempio

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);

}

(13)

Swing - Secondo esempio \ 2

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(); } });

} }

(14)

© 2015 – Jody Marca – Laboratorio numero 3

Swing - Terzo esempio

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);

}

(15)

Swing - Terzo esempio \ 2

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);

}

(16)

© 2015 – Jody Marca – Laboratorio numero 3

Swing - Terzo esempio \ 3

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);

} } }

(17)

Swing - Esercizio

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.

(18)

© 2015 – Jody Marca – Laboratorio numero 3

Files di Properties

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

(19)

Files di Properties - Esempio

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();

}

(20)

© 2015 – Jody Marca – Laboratorio numero 3

Internazionalizzazione

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

(21)

ResourceBundle

È 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?

(22)

© 2015 – Jody Marca – Laboratorio numero 3

Esempio - ResourceBundle

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"));

}

Riferimenti

Documenti correlati

All’aereo Boeing di Ethiopian Airlines, così come a quello di Lion Air precipitato in Indonesia, mancava un sistema di sicurezza in grado di avvisare i piloti di eventuali

• L’Ingegneria del Sw (Software Engineering) è una disciplina metodologica, cioè studia i metodi di produzione, le teorie alla base dei metodi, e gli strumenti di sviluppo e

come Web service, che al ricevere di una form XML che descrive una carriera risponde con un’altra form XML che dice se lo studente ` e ammesso o no alla laurea specialistica (il

Supponiamo che per fare questo sia possibile ridurre la durata di un solo task; si supponga inoltre che il task, una volta “accorciato”, non possa avere durata nulla. Si richiede

7) Si consideri un sistema di frenaggio ABS di una automobile. Per migliorare la sicurezza del dispositivo, i progettisti hanno deciso di includere tre centraline hardware di

Non deve contenere alcuna funzione di logica applicativa tranne quella di generazione degli output..

Il sistema operativo considerato in questa guida è Windows, tuttavia i passi da seguire sotto Linux sono esattamente gli stessi (il corretto funzionamento degli strumenti è

Se l’esito dello studio di fattibilità è stato positivo (ossia si è avuto l’OK dell’utente ed il progetto può essere realizzato), lo sviluppo del progetto entra nel vivo