Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
I Frame
La gerarchia dei Frame
La struttura di un Jframe(1)
La struttura di un Jframe(2) <ul><li>Un  JFrame  contiene una serie di pannelli </li></ul><ul><li>secondo una precisa rela...
Pricipali metodi dei JFrame <ul><li>void setDefaultCloseOperation (int Type) </li></ul><ul><li>void setTitle (String Titol...
Esempio  MioFrame MioFrame1
Arricchire un Frame Non possiamo disegnare, scrivere o aggiungere Componenti direttamente al Frame. Tutto va inserito dent...
Inserire un JComponent <ul><li>Ottenere il contentPane:  </li></ul><ul><li>Container contentPane=getContentPane(); </li></...
La classe Graphics ed il metodo  paintComponent() <ul><li>Tutti gli oggetti che discendono da  JComponent </li></ul><ul><l...
La classe Graphics ed il metodo paintComponent () ●  Chi chiama  paintComponent ? –  viene chiamato automaticamente ogni q...
La classe Graphics ed il metodo paintComponent () ●  Per lavorare il  paintComponent  ha bisogno di un oggetto  Graphics ●...
La classe Graphics ed il metodo paintComponent() ●  Graphics  mantiene le seguenti informazioni: –  l'oggetto sul quale si...
Alcuni Metodi della classe paintComponent() <ul><li>void setBackground( Color c) </li></ul><ul><li>void setForeground( Col...
Esempio ColoreSfondo
Testo e Font  <ul><li>●  Font standard (predefiniti) di Java: </li></ul><ul><li>–  Serif (una sorta di Times New Roman) </...
Esempio FontDisponibili
Inserimento Testo <ul><li>Creare un Componente Jpanel </li></ul><ul><li>Class nomeComponente  extends JPanel </li></ul><ul...
Esempio Saluta
Disegni Per disegnare un segmento: –  void  drawLine (int x1, int y1, int x2, int y2): disegna una linea continua Per dise...
Disegni Per disegnare un poligono: –  void  drawPolygon (int[] x, int[] y, int npoints): ●  Per disegnare una spezzata: – ...
Disegni Per disegnare rettangoli  –  void  drawRect (int x, int y, int width, int height): Per disegnare Ovali –  void  dr...
Considerazioni finali sulle primitive di disegno Esistono una serie di metodi analoghi ai precedenti per il riempimento di...
Riassunto <ul><li>Creare un Frame </li></ul><ul><li>Ottenere il “ContentPane” </li></ul><ul><li>Aggungere un componente JC...
La gestione degli eventi <ul><li>Eventi :  “azioni fisiche” compiute dall'uomo per    comunicare con un computer </li></ul...
Gestore degli eventi Applicativo Evento Azione Devo eseguire l’azione associata al bottone Chiama l’ascoltatore Esegue azi...
Come si sceglie il listener <ul><li>Suggerimento: </li></ul><ul><li>scegliere come listener per una componente l'oggetto c...
Passi per la corretta gestione di un evento  <ul><li>creare il componente ed aggiungerlo al pannello che sarà il suo conte...
Le interface <ul><li>Java non gestisce l'eredità “multipla” </li></ul><ul><li>Un oggetto non può ereditare da  JPanel  e d...
L'interfaccia ActionListener <ul><li>Essa prevede l'implementazione di un solo metodo: </li></ul><ul><li>void  actionPerfo...
Alcuni JComponent
ATTENZIONE!!!! <ul><li>Verranno elencati SOLO una minima parte dei Componenti che Java utilizza. </li></ul><ul><li>Per un ...
JButton  <ul><li>Costruttori: </li></ul><ul><li>JButton () </li></ul><ul><li>JButton (String testo) </li></ul>
JCheckBox  <ul><li>Scelta non mutuamente esclusiva </li></ul><ul><li>Costruttori: </li></ul><ul><li>JCheckBox (String etic...
JRadioButton <ul><li>Scelta mutuamente esclusiva </li></ul><ul><li>Costruttori: </li></ul><ul><li>JRadioButton (String eti...
JRadioButton <ul><li>Costruttori: </li></ul><ul><li>ButtonGroup () </li></ul><ul><li>Metodi utili </li></ul><ul><li>void  ...
Caselle ed aree di testo <ul><li>JTextComponent  (classe in cui sono definiti molti dei metodi principali) </li></ul><ul><...
JTextField <ul><li>Metodi utili: </li></ul><ul><li>String  getText (): restituisce il testo contenuto nella casella </li><...
JTextArea  <ul><li>Costruttori: </li></ul><ul><li>–  JTextArea() </li></ul><ul><li>–  JTextArea (int numRighe, int numCol)...
JTextArea <ul><li>Metodi utili  </li></ul><ul><li>–  void  setColumns (int numCol) </li></ul><ul><li>–  void  setRows (int...
Le etichette  <ul><li>Costruttori: </li></ul><ul><li>JLabel (String text) </li></ul><ul><li>JLabel (String text, int align...
I layout <ul><li>Ogni volta che disponiamo oggetti in uno spazio vuoto realizziamo un “layout” </li></ul><ul><li>Java gest...
Layout del flusso Componente 1 Componente 2 Componente 3
Layout del flusso <ul><li>FlowLayout : </li></ul><ul><li>le componenti vengono aggiunte al contenitore da sinistra a destr...
Layout del flusso <ul><li>Costruttori: </li></ul><ul><li>–  FlowLayout() </li></ul><ul><li>–  FlowLayout (int align) </li>...
Layout dei bordi Componente North Componente  Center Componente South Comp. West Comp. East
Layout dei bordi <ul><li>BorderLayout : </li></ul><ul><li>le componenti vengono aggiunte in zone </li></ul><ul><li>(“North...
Layout a Griglia Componente 1 Componente 2 Componente 4 Componente 6 Componente 5 Componente 3
Layout a Griglia <ul><li>GridLayout : </li></ul><ul><li>il Layout divide il  Container  in celle rettangolari </li></ul><u...
Creazione di animazioni  <ul><li>Tramite gli  ActionListener  e la classe  Timer  è </li></ul><ul><li>possibile generare s...
Immagini <ul><li>La classe  Toolkit  contiene gli strumenti di basso livello per la gestione delle AWT. In particolare con...
Upcoming SlideShare
Loading in …5
×

La Grafica Con Java

11,265 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

La Grafica Con Java

  1. 1. I Frame
  2. 2. La gerarchia dei Frame
  3. 3. La struttura di un Jframe(1)
  4. 4. La struttura di un Jframe(2) <ul><li>Un JFrame contiene una serie di pannelli </li></ul><ul><li>secondo una precisa relazione: </li></ul><ul><li>– JRootPane : serve a contenere il “glassPane” e il </li></ul><ul><li>“ layeredPane” </li></ul><ul><li>– glassPane: è un pannello invisibile che “copre” </li></ul><ul><li>tutti gli elementi del Frame e può catturare per </li></ul><ul><li>primo tutte le azioni che il mouse fa sulla finestra </li></ul><ul><li>– layeredPane serve a contenere il contentPane e </li></ul><ul><li>(l'eventuale) menù che si aggiunge al Frame </li></ul><ul><li>– Il contentPane serve a contenere tutti gli altri </li></ul><ul><li>elementi GUI del Frame </li></ul>
  5. 5. Pricipali metodi dei JFrame <ul><li>void setDefaultCloseOperation (int Type) </li></ul><ul><li>void setTitle (String Titolo) </li></ul><ul><li>void setResizable (boolean b) </li></ul><ul><li>void setSize (int x, int y) </li></ul><ul><li>void setLocation (int x, int y) </li></ul><ul><li>void show () </li></ul><ul><li>void hide () </li></ul>
  6. 6. Esempio MioFrame MioFrame1
  7. 7. Arricchire un Frame Non possiamo disegnare, scrivere o aggiungere Componenti direttamente al Frame. Tutto va inserito dentro il “contentPane”
  8. 8. Inserire un JComponent <ul><li>Ottenere il contentPane: </li></ul><ul><li>Container contentPane=getContentPane(); </li></ul><ul><li>Aggiungere un nuovo Componente: </li></ul><ul><li>contentPane.add( new Componente()); </li></ul>
  9. 9. La classe Graphics ed il metodo paintComponent() <ul><li>Tutti gli oggetti che discendono da JComponent </li></ul><ul><li>hanno questo metodo per “disegnarsi” </li></ul><ul><li>Affinché per ogni componente faccia ciò che si desidera il metodo va “sovrascritto” con una nuova adeguata definizione </li></ul><ul><li>public void paintComponent (Graphics g) </li></ul><ul><li>{ </li></ul><ul><li>//Per ereditare le operazioni standard </li></ul><ul><li>super.paintComponent(g); </li></ul><ul><li>//Seguono istruzioni di disegno per questa componente… </li></ul><ul><li>} </li></ul>
  10. 10. La classe Graphics ed il metodo paintComponent () ● 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.)
  11. 11. La classe Graphics ed il metodo paintComponent () ● 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
  12. 12. La classe Graphics ed il metodo paintComponent() ● 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) – ……… .
  13. 13. Alcuni Metodi della classe paintComponent() <ul><li>void setBackground( Color c) </li></ul><ul><li>void setForeground( Color c) </li></ul><ul><li>void setFont( Font f) </li></ul>
  14. 14. Esempio ColoreSfondo
  15. 15. Testo e Font <ul><li>● Font standard (predefiniti) di Java: </li></ul><ul><li>– Serif (una sorta di Times New Roman) </li></ul><ul><li>– SansSerif (una sorta di Arial) </li></ul><ul><li>– Monospaced (una sorta di Courier New) </li></ul><ul><li>I font possono avere anche uno stile </li></ul><ul><li>● La classe Font di Java lo identifica con delle costanti intere: </li></ul><ul><li>– Font.PLAIN , Font.BOLD, Font.ITALIC, Font.BOLD+Font.ITALIC , </li></ul><ul><li>Per definire un font si può usare il costruttore: </li></ul><ul><li>- Font(String nome,int stile, int dimensione) </li></ul>
  16. 16. Esempio FontDisponibili
  17. 17. Inserimento Testo <ul><li>Creare un Componente Jpanel </li></ul><ul><li>Class nomeComponente extends JPanel </li></ul><ul><li>Utilizzare il metodo drawString() della classe Graphics </li></ul><ul><li>void drawString ( String  str, int x, int y) </li></ul>
  18. 18. Esempio Saluta
  19. 19. 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
  20. 20. 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)
  21. 21. 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)
  22. 22. Considerazioni finali sulle primitive 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)
  23. 23. Riassunto <ul><li>Creare un Frame </li></ul><ul><li>Ottenere il “ContentPane” </li></ul><ul><li>Aggungere un componente JComponent al ContentPane </li></ul><ul><li>Sovrascrivere il metodo paintComponent() </li></ul>
  24. 24. La gestione degli eventi <ul><li>Eventi : “azioni fisiche” compiute dall'uomo per comunicare con un computer </li></ul><ul><li>Le componenti raccolgono gli eventi e li passano a speciali oggetti “ascoltatori” ( listener ) il cui compito è rispondere all'evento che si è verificato </li></ul><ul><li>Questo meccanismo si chiama di delega degli eventi </li></ul><ul><li>Il passaggio degli eventi agli ascoltatori è </li></ul><ul><li>completamente controllato dal programmatore </li></ul>
  25. 25. Gestore degli eventi Applicativo Evento Azione Devo eseguire l’azione associata al bottone Chiama l’ascoltatore Esegue azione Listener
  26. 26. Come si sceglie il listener <ul><li>Suggerimento: </li></ul><ul><li>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 </li></ul>
  27. 27. Passi per la corretta gestione di un evento <ul><li>creare il componente ed aggiungerlo al pannello che sarà il suo contenitore </li></ul><ul><li>assicurarsi che il pannello implementi le funzioni richieste da un ActionListener </li></ul><ul><li>descrivere dentro il body del metodo a ctionPerformed cosa deve essere fatto quando si “aziona” il componente </li></ul><ul><li>“ accreditare” il pannello come ActionListener del componente </li></ul>
  28. 28. Le interface <ul><li>Java non gestisce l'eredità “multipla” </li></ul><ul><li>Un oggetto non può ereditare da JPanel e da ActionListener </li></ul><ul><li>Java risolve il problema come segue: </li></ul><ul><li>il pannello eredita da JPanel </li></ul><ul><li>il pannello implementa l'interfaccia ActionListener </li></ul><ul><li>ciò vuol dire che chi programma il pannello </li></ul><ul><li>“ firma un contratto” con il quale si impegna ad </li></ul><ul><li>implementare tutti i metodi elencati dentro la </li></ul><ul><li>interface ActionListener </li></ul>
  29. 29. L'interfaccia ActionListener <ul><li>Essa prevede l'implementazione di un solo metodo: </li></ul><ul><li>void actionPerformed (ActionEvent e) </li></ul><ul><li>tale metodo “racchiuderà” le istruzioni da eseguire quando una delle componenti a cui il listener è registrato invia un evento di tipo “ azione ” </li></ul>
  30. 30. Alcuni JComponent
  31. 31. ATTENZIONE!!!! <ul><li>Verranno elencati SOLO una minima parte dei Componenti che Java utilizza. </li></ul><ul><li>Per un migliore approfondimento di tutti i componenti e dei relativi metodi si consiglia la consultazione della JavaDoc </li></ul>
  32. 32. JButton <ul><li>Costruttori: </li></ul><ul><li>JButton () </li></ul><ul><li>JButton (String testo) </li></ul>
  33. 33. JCheckBox <ul><li>Scelta non mutuamente esclusiva </li></ul><ul><li>Costruttori: </li></ul><ul><li>JCheckBox (String etichetta) </li></ul><ul><li>JCheckBox (String etich, boolean stato) </li></ul><ul><li>Metodi utili: </li></ul><ul><li>boolean isSelected (), void setSelected (boolean b): </li></ul><ul><li>restituisce/imposta lo stato della casella </li></ul><ul><li>Eventi: </li></ul><ul><li>ActionEvent , generato ad ogni cambio di stato </li></ul>
  34. 34. JRadioButton <ul><li>Scelta mutuamente esclusiva </li></ul><ul><li>Costruttori: </li></ul><ul><li>JRadioButton (String etichetta) </li></ul><ul><li>JRadioButton (String etichetta, boolean stato) </li></ul><ul><li>Metodi utili: </li></ul><ul><li>boolean isSelected (), void setSelected (boolean b): </li></ul><ul><li>restituisce/imposta lo stato della casella </li></ul><ul><li>Eventi: </li></ul><ul><li>ActionEvent , generato ad ogni cambio di stato </li></ul>
  35. 35. JRadioButton <ul><li>Costruttori: </li></ul><ul><li>ButtonGroup () </li></ul><ul><li>Metodi utili </li></ul><ul><li>void add (JRadioButton b): aggiunge il radiobutton al gruppo </li></ul><ul><li>Il gruppo riunisce logicamente i pulsanti tra loro </li></ul><ul><li>Per riunirli visivamente si debbono aggiungere (a parte) ad un pannello </li></ul>
  36. 36. Caselle ed aree di testo <ul><li>JTextComponent (classe in cui sono definiti molti dei metodi principali) </li></ul><ul><li>JTextField (per le caselle di testo) </li></ul><ul><li>JPasswordField (per le caselle di password) </li></ul><ul><li>JTextArea (per le aree di testo) </li></ul>
  37. 37. JTextField <ul><li>Metodi utili: </li></ul><ul><li>String getText (): restituisce il testo contenuto nella casella </li></ul><ul><li>void setText (String str): imposta il testo contenuto nella casella </li></ul><ul><li>void setEditable (boolean b): abilita/disabilita l'editabilità della casella </li></ul><ul><li>Eventi </li></ul><ul><li>ActionEvent : viene lanciato quando si digita un </li></ul><ul><li>testo nella casella di testo e si da un “invio” finale. </li></ul>
  38. 38. JTextArea <ul><li>Costruttori: </li></ul><ul><li>– JTextArea() </li></ul><ul><li>– JTextArea (int numRighe, int numCol) </li></ul><ul><li>– JTextArea( String str ) </li></ul><ul><li>– JTextArea (String str, int numRighe, int numCol) </li></ul>
  39. 39. JTextArea <ul><li>Metodi utili </li></ul><ul><li>– void setColumns (int numCol) </li></ul><ul><li>– void setRows (int numRighe) </li></ul><ul><li>– void setText (String str) </li></ul><ul><li>– String getText () </li></ul><ul><li>– void append (String str) </li></ul><ul><li>– void insert (String str, int pos) </li></ul>
  40. 40. Le etichette <ul><li>Costruttori: </li></ul><ul><li>JLabel (String text) </li></ul><ul><li>JLabel (String text, int align) </li></ul><ul><li>align è: SwingConstants.LEFT, SwingConstants.RIGHT, SwingConstants.CENTER </li></ul><ul><li>Metodi utili: </li></ul><ul><li>void setText (String str): imposta un nuovo testo </li></ul><ul><li>void setFont (Font font): imposta un nuovo font </li></ul>
  41. 41. I layout <ul><li>Ogni volta che disponiamo oggetti in uno spazio vuoto realizziamo un “layout” </li></ul><ul><li>Java gestisce la disposizione dei componenti dentro i Container mediante oggetti che si chiamano LayoutManager </li></ul><ul><li>Per impostare un layout si deve utilizzare il metodo dei Container : </li></ul><ul><li>void setLayout (LayoutManager mgr) </li></ul>
  42. 42. Layout del flusso Componente 1 Componente 2 Componente 3
  43. 43. Layout del flusso <ul><li>FlowLayout : </li></ul><ul><li>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. </li></ul><ul><li>E’ il layout predefinito per i pannelli </li></ul>
  44. 44. Layout del flusso <ul><li>Costruttori: </li></ul><ul><li>– FlowLayout() </li></ul><ul><li>– FlowLayout (int align) </li></ul><ul><li>– FlowLayout (int align, int hgap, int vgap) </li></ul><ul><li>align può essere FlowLayout.LEFT, </li></ul><ul><li>FlowLayout.CENTER, FlowLayout.RIGHT </li></ul>
  45. 45. Layout dei bordi Componente North Componente Center Componente South Comp. West Comp. East
  46. 46. Layout dei bordi <ul><li>BorderLayout : </li></ul><ul><li>le componenti vengono aggiunte in zone </li></ul><ul><li>(“North”, “South”,”East”,”West”, ”Center”) del </li></ul><ul><li>contenitore e ridimensionate “ad hoc” </li></ul><ul><li>E’ il layout predefinito per i frame </li></ul><ul><li>Costruttori: </li></ul><ul><li>– BorderLayout () </li></ul><ul><li>– BorderLayout (int hgap, int vgap) </li></ul>
  47. 47. Layout a Griglia Componente 1 Componente 2 Componente 4 Componente 6 Componente 5 Componente 3
  48. 48. Layout a Griglia <ul><li>GridLayout : </li></ul><ul><li>il Layout divide il Container in celle rettangolari </li></ul><ul><li>eguali disposte in righe x colonne. </li></ul><ul><li>Le componenti vengono aggiunte riga per riga, da </li></ul><ul><li>sinistra verso destra una per cella. </li></ul><ul><li>Costruttori </li></ul><ul><li>GridLayout (int righe, int colonne) </li></ul><ul><li>GridLayout (int righe, int colonne, int hgap, int </li></ul><ul><li>vgap) </li></ul>
  49. 49. Creazione di animazioni <ul><li>Tramite gli ActionListener e la classe Timer è </li></ul><ul><li>possibile generare semplici animazioni </li></ul><ul><li>Il costruttore della classe è: </li></ul><ul><li>Timer (int delay, ActionListener listener) </li></ul><ul><li>Per lanciare e fermare il Timer si usano i metodi: </li></ul><ul><li>void start (), void stop (): avvia e ferma il timer </li></ul><ul><li>l'ActionListener provvederà a far partire l'aggiornamento della grafica o altro </li></ul>
  50. 50. Immagini <ul><li>La classe Toolkit contiene gli strumenti di basso livello per la gestione delle AWT. In particolare contiene alcuni metodi utilizzabili per caricare le immagini: </li></ul><ul><li>Image getImage (String fileName): carica </li></ul><ul><li>un'immagine dal file specificato come parametro; i formati supportati sono GIF, JPEG e PNG (dalla </li></ul><ul><li>1.5 anche BMP e WBMP) </li></ul><ul><li>Image getImage (URL url) : carica un'immagine </li></ul><ul><li>dall'URL specificato </li></ul>

×