Download - La Grafica Con Java
![Page 1: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/1.jpg)
I Frame
![Page 2: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/2.jpg)
La gerarchia dei Frame
![Page 3: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/3.jpg)
La struttura di un Jframe(1)
![Page 4: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/6.jpg)
Esempio MioFrame
MioFrame1
![Page 7: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/8.jpg)
Inserire un JComponent
• Ottenere il contentPane:
Container contentPane=getContentPane();
• Aggiungere un nuovo Componente:
contentPane.add( new Componente());
![Page 9: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/13.jpg)
Alcuni Metodi della classepaintComponent()
• void setBackground( Color c)
• void setForeground( Color c)
• void setFont( Font f)
![Page 14: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/14.jpg)
Esempio ColoreSfondo
![Page 15: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/16.jpg)
Esempio FontDisponibili
![Page 17: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/18.jpg)
Esempio Saluta
![Page 19: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/23.jpg)
Riassunto• Creare un Frame
• Ottenere il “ContentPane”
• Aggungere un componente JComponent al ContentPane
• Sovrascrivere il metodo paintComponent()
![Page 24: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/30.jpg)
Alcuni JComponent
![Page 31: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/32.jpg)
JButton
Costruttori:• JButton()• JButton(String testo)
![Page 33: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/38.jpg)
JTextArea
Costruttori:• – JTextArea()• – JTextArea(int numRighe, int numCol)• – JTextArea(String str)• – JTextArea(String str, int numRighe, int
numCol)
![Page 39: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/42.jpg)
Layout del flusso
Componente 1 Componente 2
Componente 3
![Page 43: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/45.jpg)
Layout dei bordi
Componente North
Componente
Center
Componente South
Com
p. W
est
Com
p. E
ast
![Page 46: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/47.jpg)
Layout a Griglia
Componente 1 Componente 2
Componente 4
Componente 6Componente 5
Componente 3
![Page 48: La Grafica Con Java](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022062319/5563a6cad8b42a01658b5568/html5/thumbnails/50.jpg)
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