La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base.

Presentazioni simili


Presentazione sul tema: "Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base."— Transcript della presentazione:

1 Progetto di applicazioni grafiche

2 Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base class Car {... public void draw(Graphics2D g) { // Istruzioni per il disegno... } }

3 Esempio: due automobili

4 Progetto della Forma Origine e punto di riferimento della forma

5 File Car.java 01: import java.awt.Graphics2D; 02: import java.awt.Rectangle; 03: import java.awt.geom.Ellipse2D; 04: import java.awt.geom.Line2D; 05: import java.awt.geom.Point2D; 06: 07: /** 08: Una forma di auto posizionabile in un un punto qualunque di una finestra. 09: */ 10: public class Car 11: { 12: /** 13: Costruisce una auto a partire da una data origine 14: @param x la coordinata x dellorigine 15: @param y la coordinata y dellorigine 16: */ Continua…

6 File Car.java 17: public Car(int x, int y) 18: { 19: xLeft = x; 20: yTop = y; 21: } 22: 23: /** 24: Disegna lauto. 25: @param g2 il contesto grafico per il disegno 26: */ 27: public void draw(Graphics2D g2) 28: { 29: Rectangle scocca 30: = new Rectangle(xLeft, yTop + 10, 60, 10); 31: Ellipse2D.Double ruotaAnteriore 32: = new Ellipse2D.Double(xLeft + 10, yTop + 20, 10, 10); 33: Ellipse2D.Double ruotaPosteriore Continua…

7 File Car.java 34: = new Ellipse2D.Double(xLeft + 40, yTop + 20, 10, 10); 35: 36: // estremo inferiore del parabrezza 37: Point2D.Double p1 38: = new Point2D.Double(xLeft + 10, yTop + 10); 39: // estremo anteriore del tetto 40: Point2D.Double p2 41: = new Point2D.Double(xLeft + 20, yTop); 42: // estremo posteriore del tetto 43: Point2D.Double p3 44: = new Point2D.Double(xLeft + 40, yTop); 45: // estremo inferiore del lunotto 46: Point2D.Double p4 47: = new Point2D.Double(xLeft + 50, yTop + 10); 48: 49: Line2D.Double parabrezza 50: = new Line2D.Double(p1, p2); Continua…

8 File Car.java 51: Line2D.Double tetto 52: = new Line2D.Double(p2, p3); 53: Line2D.Double lunotto 54: = new Line2D.Double(p3, p4); 55: 56: g2.draw(scocca); 57: g2.draw(ruotaAnteriore); 58: g2.draw(ruotaPosteriore); 59: g2.draw(parabrezza); 60: g2.draw(tetto); 61: g2.draw(lunotto); 62: } 63: 64: public static int WIDTH = 60; 65: public static int HEIGHT = 30; 66: private int xLeft; 67: private int yTop; 68: }

9 Costruiamo lapplicazione

10 JComponent contenente il disegno Ricordiamo: istruzioni per il disegno nel metodo paintComponent Posizione in basso a dx: getWidth e getHeight chiamati sulloggetto che esegue paintComponent Se cambia la dimensione della finestra paintComponent viene invocato e la posizione dellauto ricalcolata int x = getWidth() – Car.WIDTH; int y = getHeight()– Car.HEIGHT; Car bottomCar = new Car(x, y); Continua…

11 File CarComponent.java 01: import java.awt.Graphics; 02: import java.awt.Graphics2D; 03: import javax.swing.JComponent; 04: 05: /** 06: This component draws two car shapes. 07: */ 08: class CarComponent extends JComponent 09: { 10: public void paintComponent(Graphics g) 11: { 12: Graphics2D g2 = (Graphics2D) g; 13: 14: Car topCar = new Car(0, 0); 15: Continua…

12 File CarComponent.java 16: int x = getWidth() - Car.WIDTH; 17: int y = getHeight() - Car.HEIGHT; 18: 19: Car bottomCar = new Car(x, y); 20: 21: topCar.draw(g2); 22: bottomCar.draw(g2); 23: } 24: } Il metodo draw della classe Car invoca i metodi del contesto grafico g2 per comporre il disegno

13 Lapplicazione CarViewer.java 01: import javax.swing.JFrame; 02: 03: public class CarViewer 04: { 05: public static void main(String[] args) 06: { 07: JFrame frame = new JFrame(); 08: 09: final int FRAME_WIDTH = 300; 10: final int FRAME_HEIGHT = 400; 11: 12: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 13: frame.setTitle("Two cars"); 14: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Continua…

14 File CarViewer.java 15: 16: CarComponent component = new CarComponent(); 17: frame.add(component); 18: 19: frame.setVisible(true); 20: } 21: }

15 Domanda 8.Quale classe dobbiamo modificare per ottenere un disegno in cui le auto sono disposte una vicino allaltra?

16 Risposta 8. CarComponent

17 Altre forme grafiche Rectangle fasciaVerde = new Rectangle(100, 100, 30, 60); Rectangle fasciaRossa = new Rectangle(160, 100, 30, 60); Line2D.Double topLine = new Line2D.Double(130, 100, 160, 100); Line2D.Double bottomLine = new Line2D.Double(130, 160, 160, 160);

18 Lettura da un dialog box In una una applicazione grafica possiamo dare input mediante un JOptionPane Il metodo showInputDialog attiva una finestra che dà un prompt e attende input restituisce la stringa fornita dallutente Continua… String input = JOptionPane.showInputDialog("Enter x"); double x = Double.parseDouble(input);

19 Un dialog box

20 ColorViewer Una applicazione che permette allutente di comporre un colore decidendo i parametri del formato rgb I valori vengono richiesti in seguenza mediante dialog boxes Al termine lapplicazione attiva una finestra con un quadrato del colore composto dallutente

21 File ColorViewer.java 01: import java.awt.Color; 02: import javax.swing.JFrame; 03: import javax.swing.JOptionPane; 04: 05: class ColorViewer 06: { 07: public static void main(String[] args) 08: { 09: JFrame frame = new JFrame(); 10: 11: final int FRAME_WIDTH = 300; 12: final int FRAME_HEIGHT = 400; 13: 14: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 15: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 16: 17: String input; 18: Continua…

22 File ColorViewer.java 19: // Chiedi allutente I valori di red, green, blue 20: 21: input = JOptionPane.showInputDialog("red:"); 22: double red = Double.parseDouble(input); 23: 24: input = JOptionPane.showInputDialog("green:"); 25: double green = Double.parseDouble(input); 26: 27: input = JOptionPane.showInputDialog("blue:"); 28: double blue = Double.parseDouble(input); 29: 30: Color coloreScelto = new Color( 31: (float) red, (float) green, (float) blue); 32: ColorComponent component 33: = new ColorComponent(coloreScelto); 34: frame.add(component); 35: 36: frame.setVisible(true); 37: } 38: }

23 File ColorComponent.java 01: import java.awt.Color; 02: import java.awt.Graphics; 03: import java.awt.Graphics2D; 04: import java.awt.Rectangle; 05: import javax.swing.JComponent; 06: 07: /** 08: Una componente che include un quadrato colorato 09: */ 10: class ColorComponent extends JComponent 11: { private Color fillColor; // colore di riempimento 12: /** 13: Costruisce la componente 14: @param c il colore di riempimento del quadrato 15: */ 16: public ColorComponent(Color c) Continua…

24 File ColorComponent.java 17: { 18: fillColor = c; 19: } 20: 21: public void paintComponent(Graphics g) 22: { 23: Graphics2D g2 = (Graphics2D) g; 24: 25: // Seleziona il colore del contesto grafico 26: 27: g2.setColor(fillColor); 28: 29: // Costruisci e colora un quadrato al centro 30: // della finestra 31: Continua…

25 File ColorComponent.java 32: final int LATO = 100; 33: 34: Rectangle quadrato = new Rectangle( 35: (getWidth() - LATO) / 2, 36: (getHeight() - LATO) / 2, 37: LATO, 38: LATO); 39: 40: g2.fill(quadrato); 41: } 43: }

26 Output

27 Domande 9.Sarebbe possibile chiedere i tre valori per r,g, e b in un unico dialog box? 10.Perché lapplicazione invoca showInputDialog dal metodo main main della classe ColorViewer e non dal metodo paintComponent della classe ColorComponent ?

28 Risposte 9.Certo, ma in quel caso è necessario estrarre poi le singole componenti … un utile esercizio di semplice su stringhe 10.Perchè in quel caso i dialog box verrebbero rilanciati tutte le volte che la finestra viene mossa / resized / deiconificata /…


Scaricare ppt "Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base."

Presentazioni simili


Annunci Google