La Grafica Con Java

50
I Frame

description

Slide che presentano brevemente la grafica in Java realizzate dal Prof. Fabio R. Gambera

Transcript of La Grafica Con Java

Page 1: La Grafica Con Java

I Frame

Page 2: La Grafica Con Java

La gerarchia dei Frame

Page 3: La Grafica Con Java

La struttura di un Jframe(1)

Page 4: La Grafica Con Java

La struttura di un Jframe(2)Un JFrame contiene una serie di pannellisecondo una precisa relazione:– JRootPane: serve a contenere il “glassPane” e il“layeredPane”– glassPane: è un pannello invisibile che “copre”tutti gli elementi del Frame e può catturare perprimo tutte le azioni che il mouse fa sulla finestra– layeredPane serve a contenere il contentPane e(l'eventuale) menù che si aggiunge al Frame– Il contentPane serve a contenere tutti gli altrielementi GUI del Frame

Page 5: La Grafica Con Java

Pricipali metodi dei JFrame

• void setDefaultCloseOperation(int Type)• void setTitle(String Titolo)• void setResizable(boolean b)• void setSize(int x, int y)• void setLocation(int x, int y)• void show()• void hide()

Page 6: La Grafica Con Java

Esempio MioFrame

MioFrame1

Page 7: La Grafica Con Java

Arricchire un Frame

Non possiamo disegnare, scrivere o aggiungere Componenti direttamente al Frame.Tutto va inserito dentro il “contentPane”

Page 8: La Grafica Con Java

Inserire un JComponent

• Ottenere il contentPane:

Container contentPane=getContentPane();

• Aggiungere un nuovo Componente:

contentPane.add( new Componente());

Page 9: La Grafica Con Java

La classe Graphics ed il metodo paintComponent()

• Tutti gli oggetti che discendono da JComponenthanno questo metodo per “disegnarsi”

• Affinché per ogni componente faccia ciò che si desidera il metodo va “sovrascritto” con una nuova adeguata definizione

public void paintComponent(Graphics g){//Per ereditare le operazioni standardsuper.paintComponent(g);//Seguono istruzioni di disegno per questa componente…}

Page 10: La Grafica Con Java

La classe Graphics ed il metodopaintComponent ()

● Chi chiama paintComponent?

– viene chiamato automaticamente ogni qualvolta sia

necessario. Non deve essere chiamato manualmente

● Per forzarne la chiamata usare il metodo:

– void repaint(): forza il ridisegno della finestra

● Quali azioni attivano il paintComponent?

– tutto ciò che provoca un ridisegno della finestra (ridimensionamento della finestra, riduzione ad

icona, massimizzazione, sovrapposizione di finestre, ecc.)

Page 11: La Grafica Con Java

La classe Graphics ed il metodopaintComponent ()

● Per lavorare il paintComponent ha bisogno di un oggetto Graphics● Esso è la sua “memoria” e il suo “libretto di istruzioni” per eseguire i comandi di disegno che chiederemo nel nostro codice● Un Graphics (contesto grafico) viene creato dal JComponent appena deve essere disegnato la prima volta

Page 12: La Grafica Con Java

La classe Graphics ed il metodopaintComponent()

● Graphics mantiene le seguenti informazioni:– l'oggetto sul quale si disegna– il sistema di coordinate adottato per disegnare– il colore di foreground (colore con cui disegnare) void setColor(Color c)– il font usato per le stringhe e le sue proprietà– il “clip” (ritaglio)– la modalità di disegno (Paint o XOR)– ……….

Page 13: La Grafica Con Java

Alcuni Metodi della classepaintComponent()

• void setBackground( Color c)

• void setForeground( Color c)

• void setFont( Font f)

Page 14: La Grafica Con Java

Esempio ColoreSfondo

Page 15: La Grafica Con Java

Testo e Font ● Font standard (predefiniti) di Java:

– Serif (una sorta di Times New Roman)

– SansSerif (una sorta di Arial)

– Monospaced (una sorta di Courier New)

I font possono avere anche uno stile

● La classe Font di Java lo identifica con delle costanti intere:

– Font.PLAIN , Font.BOLD, Font.ITALIC, Font.BOLD+Font.ITALIC,

• Per definire un font si può usare il costruttore:

- Font(String nome,int stile, int dimensione)

Page 16: La Grafica Con Java

Esempio FontDisponibili

Page 17: La Grafica Con Java

Inserimento Testo

•Creare un Componente Jpanel

Class nomeComponente extends JPanel

•Utilizzare il metodo drawString() della classe Graphics

void drawString(String str, int x, int y)

Page 18: La Grafica Con Java

Esempio Saluta

Page 19: La Grafica Con Java

Disegni

Per disegnare un segmento:

– void drawLine(int x1, int y1, int x2, int y2):

disegna una linea continua

Per disegnare un punto:

– void drawLine(int x1, int y1, int x1, int y1):

disegna un punto

Page 20: La Grafica Con Java

Disegni

Per disegnare un poligono:– void drawPolygon(int[] x, int[] y, int npoints):● Per disegnare una spezzata:– void drawPolyline(int[] xCoord, int[] yCoord, int npoints) ● Per disegnare un arco:– void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)

Page 21: La Grafica Con Java

Disegni

Per disegnare rettangoli – void drawRect(int x, int y, int width, int height):Per disegnare Ovali– void drawOval(int x, int y, int width, int height):Per disegnare rettangoli arrotondati:– void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

Page 22: La Grafica Con Java

Considerazioni finali sulleprimitive di disegno

Esistono una serie di metodi analoghi ai

precedenti per il riempimento di forme:

– void fillPolygon(Polygon p)

– void fillPolygon(int[] x, int[] y, int npoints)

– void fillArc(int x, int y, int width, int height, int

startAngle, int arcAngle)

– void fillRect(int x, int y, int width, int height)

– void fillOval(int x, int y, int width, int height)

– void fillRoundRect(int x, int y, int width, int

height, int arcWidth, int arcHeight)

Page 23: La Grafica Con Java

Riassunto• Creare un Frame

• Ottenere il “ContentPane”

• Aggungere un componente JComponent al ContentPane

• Sovrascrivere il metodo paintComponent()

Page 24: La Grafica Con Java

La gestione degli eventiEventi: “azioni fisiche” compiute dall'uomo

per comunicare con un computer

• Le componenti raccolgono gli eventi e li passano a speciali oggetti “ascoltatori” (listener) il cui compito è rispondere all'evento che si è verificato

• Questo meccanismo si chiama di delega degli eventi

• Il passaggio degli eventi agli ascoltatori è completamente controllato dal

programmatore

Page 25: La Grafica Con Java

Gestore degli eventi

Applicativo

Evento

Azione

Devo eseguire l’azione associata al bottone

Chiama l’ascoltatore Esegue azione

Listener

Page 26: La Grafica Con Java

Come si sceglie il listener

Suggerimento:scegliere come listener per una

componente l'oggetto che potrà più agevolmente gestire i suoi eventi. Solitamente questo vuol dire che il listener di un gruppo di componenti è il loro Container

Page 27: La Grafica Con Java

Passi per la corretta gestione di un evento

• creare il componente ed aggiungerlo al pannello che sarà il suo contenitore

• assicurarsi che il pannello implementi le funzioni richieste da un ActionListener

• descrivere dentro il body del metodo actionPerformed cosa deve essere fatto quando si “aziona” il componente

• “accreditare” il pannello come ActionListener del componente

Page 28: La Grafica Con Java

Le interface

• Java non gestisce l'eredità “multipla”• Un oggetto non può ereditare da JPanel e da

ActionListenerJava risolve il problema come segue:• il pannello eredita da JPanel• il pannello implementa l'interfaccia

ActionListenerciò vuol dire che chi programma il pannello“firma un contratto” con il quale si impegna adimplementare tutti i metodi elencati dentro lainterface ActionListener

Page 29: La Grafica Con Java

L'interfaccia ActionListener

Essa prevede l'implementazione di un solo metodo:

• void actionPerformed(ActionEvent e)tale metodo “racchiuderà” le

istruzioni da eseguire quando una delle componenti a cui il listener è registrato invia un evento di tipo “azione”

Page 30: La Grafica Con Java

Alcuni JComponent

Page 31: La Grafica Con Java

ATTENZIONE!!!!

• Verranno elencati SOLO una minima parte dei Componenti che Java utilizza.

Per un migliore approfondimento di tutti i componenti e dei relativi metodi si consiglia la consultazione della JavaDoc

Page 32: La Grafica Con Java

JButton

Costruttori:• JButton()• JButton(String testo)

Page 33: La Grafica Con Java

JCheckBox Scelta non mutuamente esclusiva

Costruttori:• JCheckBox(String etichetta)• JCheckBox(String etich, boolean stato) Metodi utili:• boolean isSelected(), void setSelected(boolean b):restituisce/imposta lo stato della casellaEventi:ActionEvent, generato ad ogni cambio di stato

Page 34: La Grafica Con Java

JRadioButton

Scelta mutuamente esclusivaCostruttori:• JRadioButton(String etichetta)• JRadioButton(String etichetta, boolean stato)Metodi utili:• boolean isSelected(), void setSelected(boolean

b):restituisce/imposta lo stato della casellaEventi:• ActionEvent, generato ad ogni cambio di stato

Page 35: La Grafica Con Java

JRadioButton

Costruttori:• ButtonGroup() Metodi utili• void add(JRadioButton b): aggiunge il

radiobutton al gruppoIl gruppo riunisce logicamente i pulsanti tra

loroPer riunirli visivamente si debbono

aggiungere (a parte) ad un pannello

Page 36: La Grafica Con Java

Caselle ed aree di testo

• JTextComponent (classe in cui sono definiti molti dei metodi principali)

• JTextField (per le caselle di testo)• JPasswordField (per le caselle di

password)• JTextArea (per le aree di testo)

Page 37: La Grafica Con Java

JTextFieldMetodi utili:• String getText(): restituisce il testo contenuto nella

casella• void setText(String str): imposta il testo contenuto nella

casella• void setEditable(boolean b): abilita/disabilita

l'editabilità della casellaEventi ActionEvent: viene lanciato quando si digita untesto nella casella di testo e si da un “invio” finale.

Page 38: La Grafica Con Java

JTextArea

Costruttori:• – JTextArea()• – JTextArea(int numRighe, int numCol)• – JTextArea(String str)• – JTextArea(String str, int numRighe, int

numCol)

Page 39: La Grafica Con Java

JTextAreaMetodi utili • – void setColumns(int numCol)• – void setRows(int numRighe)• – void setText(String str)• – String getText()• – void append(String str)• – void insert(String str, int pos)

Page 40: La Grafica Con Java

Le etichette

Costruttori:• JLabel(String text)• JLabel(String text, int align)align è: SwingConstants.LEFT,

SwingConstants.RIGHT, SwingConstants.CENTER

Metodi utili:• void setText(String str): imposta un nuovo

testo• void setFont(Font font): imposta un nuovo font

Page 41: La Grafica Con Java

I layout

Ogni volta che disponiamo oggetti in uno spazio vuoto realizziamo un “layout”

Java gestisce la disposizione dei componenti dentro i Container mediante oggetti che si chiamano LayoutManager

• Per impostare un layout si deve utilizzare il metodo dei Container:

• void setLayout(LayoutManager mgr)

Page 42: La Grafica Con Java

Layout del flusso

Componente 1 Componente 2

Componente 3

Page 43: La Grafica Con Java

Layout del flussoFlowLayout:le componenti vengono aggiunte al contenitore

da sinistra a destra, riempiendo uno dopo l'altro le “righe” disponibili. Le dimensioni delle componenti sono determinate in base alle esigenze di ciò che si deve aggiungere.

E’ il layout predefinito per i pannelli

Page 44: La Grafica Con Java

Layout del flussoCostruttori:• – FlowLayout()• – FlowLayout(int align)• – FlowLayout(int align, int hgap, int vgap)

align può essere FlowLayout.LEFT,FlowLayout.CENTER, FlowLayout.RIGHT

Page 45: La Grafica Con Java

Layout dei bordi

Componente North

Componente

Center

Componente South

Com

p. W

est

Com

p. E

ast

Page 46: La Grafica Con Java

Layout dei bordi

BorderLayout:le componenti vengono aggiunte in zone(“North”, “South”,”East”,”West”, ”Center”) del• contenitore e ridimensionate “ad hoc”

E’ il layout predefinito per i frameCostruttori:• – BorderLayout()• – BorderLayout(int hgap, int vgap)

Page 47: La Grafica Con Java

Layout a Griglia

Componente 1 Componente 2

Componente 4

Componente 6Componente 5

Componente 3

Page 48: La Grafica Con Java

Layout a Griglia

GridLayout:il Layout divide il Container in celle rettangolarieguali disposte in righexcolonne.Le componenti vengono aggiunte riga per riga, dasinistra verso destra una per cella.Costruttori• GridLayout(int righe, int colonne)• GridLayout(int righe, int colonne, int hgap, intvgap)

Page 49: La Grafica Con Java

Creazione di animazioni Tramite gli ActionListener e la classe Timer èpossibile generare semplici animazioniIl costruttore della classe è:• Timer(int delay, ActionListener listener)Per lanciare e fermare il Timer si usano i

metodi:• void start(), void stop(): avvia e ferma il

timer

l'ActionListener provvederà a far partire l'aggiornamento della grafica o altro

Page 50: La Grafica Con Java

Immagini

La classe Toolkit contiene gli strumenti di basso livello per la gestione delle AWT. In particolare contiene alcuni metodi utilizzabili per caricare le immagini:

• Image getImage(String fileName): caricaun'immagine dal file specificato come parametro;

i formati supportati sono GIF, JPEG e PNG (dalla• 1.5 anche BMP e WBMP)• Image getImage(URL url) : carica un'immaginedall'URL specificato