La Grafica Con Java
-
Upload
giuseppe-tropea -
Category
Technology
-
view
10.686 -
download
0
description
Transcript of La Grafica Con Java
I Frame
La gerarchia dei Frame
La struttura di un Jframe(1)
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
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()
Esempio MioFrame
MioFrame1
Arricchire un Frame
Non possiamo disegnare, scrivere o aggiungere Componenti direttamente al Frame.Tutto va inserito dentro il “contentPane”
Inserire un JComponent
• Ottenere il contentPane:
Container contentPane=getContentPane();
• Aggiungere un nuovo Componente:
contentPane.add( new Componente());
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…}
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.)
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
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)– ……….
Alcuni Metodi della classepaintComponent()
• void setBackground( Color c)
• void setForeground( Color c)
• void setFont( Font f)
Esempio ColoreSfondo
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)
Esempio FontDisponibili
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)
Esempio Saluta
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
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)
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)
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)
Riassunto• Creare un Frame
• Ottenere il “ContentPane”
• Aggungere un componente JComponent al ContentPane
• Sovrascrivere il metodo paintComponent()
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
Gestore degli eventi
Applicativo
Evento
Azione
Devo eseguire l’azione associata al bottone
Chiama l’ascoltatore Esegue azione
Listener
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
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
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
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”
Alcuni JComponent
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
JButton
Costruttori:• JButton()• JButton(String testo)
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
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
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
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)
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.
JTextArea
Costruttori:• – JTextArea()• – JTextArea(int numRighe, int numCol)• – JTextArea(String str)• – JTextArea(String str, int numRighe, int
numCol)
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)
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
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)
Layout del flusso
Componente 1 Componente 2
Componente 3
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
Layout del flussoCostruttori:• – FlowLayout()• – FlowLayout(int align)• – FlowLayout(int align, int hgap, int vgap)
align può essere FlowLayout.LEFT,FlowLayout.CENTER, FlowLayout.RIGHT
Layout dei bordi
Componente North
Componente
Center
Componente South
Com
p. W
est
Com
p. E
ast
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)
Layout a Griglia
Componente 1 Componente 2
Componente 4
Componente 6Componente 5
Componente 3
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)
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
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