Grafica swing in Java
JFrame
Costruttori
• public JFrame()
– Crea un nuovo Frame inizialmente invisibile
• public JFrame(String title)
– Crea un nuovo frame, inizialmente invisibile, con un testo
specificato.
Metodi
• public void setVisible(boolean b)
– Mostra o nasconde un Frame in base al valore del parametro b
2
JFrame - metodi
• public void setSize(int width, int height)
– Imposta la dimensione della finestra
• public void setTitle(String title)
– Imposta il titolo della finestra
• public void setLocation(int x, int y)
– Sposta la finestra nella posizione x,y specificata (relativa
all’angolo in alto a sinistra della finestra)
• public void setDefaultCloseOperation(int operation)
– Imposta l’operazione che viene eseguita quando si chiude la finestra.
– JFrame.DO_NOTHING_ON_CLOSE
– JFrame.HIDE_ON_CLOSE
– JFrame.DISPOSE_ON_CLOSE
– JFrame.EXIT_ON_CLOSE.
3
Esercizio 1
Scrivere la seguente porzione di codice per la creazione di un Frame java
import javax.swing.*;
import java.awt.*;
public class Finestra extends JFrame {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(800, 600);
f.setTitle("La mia finestra verso il mondo");
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Scrivere la classe Finestra, compilare ed eseguire
Color - java.awt.Color
import java.awt.*;
Costruttori
• public Color(int r, int g, int b)
– Crea un colore RGB opaco nel range (0 - 255).
• public Color(int r, int g, int b, int a)
– Crea un colore RGB nel range (0 - 255) con l’aggiunta della
trasparenza (canale Alpha).
• Alcuni colori già pronti, come campi statici di Color
–
–
–
–
Color.BLACK ,Color.BLUE ,Color.CYAN , Color.DARK_GRAY,
Color. GRAY, Color.GREEN, Color.LIGHT_GRAY,
Color.MAGENTA , Color.ORANGE, Color.PINK,
Color.RED, Color.WHITE, Color.YELLOW
5
Esempi con i colori
• Uso dei colori predefiniti
– Esempio:
• Color c=Color.RED
• Per creare colori personalizzati
– Uso del costruttore Color c=new Color(int R,int G,int B);
– Esempio
• Color c=new Color(0,0,128);//blu scuro
Il pannello di sfondo del Jframe
Container c
Da Jframe…
• public Container getContentPane()
– Ritorna il contentPane per il Frame.
• public void setContentPane(Container contentPane)
– Imposta il contentPane del Frame.
Alcuni metodi del Container
• void setBackground(Color c)
– Sets the background color of this component.
• Esempio:
– Container c…
– c.setBackground(Color.red);
Esercizio 2
• Cambiare il colore dello sfondo del ContentPane
– Sfondo di colore grigio chiaro
….
JFrame f = new JFrame();
f.setSize(800, 600);
f.setTitle("La mia finetra verso il mondo");
Container c = f.getContentPane();
c.setBackground(Color.LIGHT_GRAY);
…
Componenti e Container
Alcuni metodi di Container per aggiungere componenti
grafici
• Component add(Component comp)
– Appends the specified component to the end of this
container.
• void add(Component comp, Object constraints)
– Adds the specified component to the end of this container.
• Cosa è un Component?
– Dalla classe Component derivano molti oggetti java come
bottoni, pannelli, checkbox etc …
– Ne vedremo alcuni utilizzi…
Alcuni Component
JTextField
JPanel
JLabel
JCheckBox
JButton
JFrame
JComboBox
ContentPane
11
JPanel - javax.swing.JPanel
• La classe JPanel implementa un contenitore senza
cornice che si usa per contenere altri componenti
12
JPanel
Costruttore
• public JPanel()
– Crea un panel vuoto con flow layout.
Metodi
• public void setBackground(Color bg)
– Imposta il colore di sfondo. Il colore è usato solo se il componente
è opaco.
• public void setOpaque(boolean b)
– Se true lo sfondo del componente (background) viene disegnato
13
JPanel - metodi
• public Component add(Component comp)
– Aggiunge un componente (Component di Swing) al pannello e viene
posizionato in base al Layout Manager
• public void add(Component comp, Object constraints)
– Come il metodo precedente, ma permette di specificare alcuni vincoli di alcuni
LayoutManager - overloading
• public void setPreferredSize(Dimension preferredSize)
– Imposta la dimensione preferita di un componente
Ad un pannello posso aggiungere anche altri Pannelli
• Serve per organizzare meglio lo spazio
14
Esercizio 3
• Aggiungere al content panel un pannello con sfondo
rosso, posizionandolo a sud
…
final Container c = f.getContentPane();
c.setBackground(Color.LIGHT_GRAY);
JPanel pannelloSud = new JPanel();
c.add(pannelloSud, BorderLayout.SOUTH);
pannelloSud.setBackground(Color.RED);
…
Esercizio 4
• Aggiungere al content panel un altro pannello, di colore
blu, a sinistra
…
JPanel pannelloSud = new JPanel();
c.add(pannelloSud, BorderLayout.SOUTH);
pannelloSud.setBackground(Color.RED);
JPanel pannelloSinistra = new JPanel();
c.add(pannelloSinistra, BorderLayout.WEST);
pannelloSinistra.setBackground(Color.BLUE);
…
Osservazione
• Il codice per inserire un pannello a sinistra e quello
per inserirlo in basso sono molto simili
– Come possiamo fare per evitare di riscrivere tante volte
lo stesso codice?
Esercizio 5/1
• Aggiungo un metodo per aggiungere un generico
pannello
public static void aggiungiPannello(Container c,
String posizione, Color coloreSfondo) {
JPanel pannelloSud = new JPanel();
c.add(pannelloSud, posizione);
pannelloSud.setBackground(coloreSfondo);
}
Esercizio 5/2
• Modifico il main e uso il nuovo metodo creato
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(800, 600);
f.setTitle("La mia finetra verso il mondo");
final Container c = f.getContentPane();
c.setBackground(Color.LIGHT_GRAY);
/*JPanel pannelloSud = new JPanel();
c.add(pannelloSud, BorderLayout.SOUTH);
pannelloSud.setBackground(Color.RED); */
aggiungiPannello(c, BorderLayout.SOUTH, Color.RED);
…
Esercizio 5/3
• Modifico il main e uso il nuovo metodo creato
… continua dal main …
/*JPanel pannelloSinistra = new JPanel();
c.add(pannelloSinistra, BorderLayout.WEST);
pannelloSinistra.setBackground(Color.BLUE);*/
aggiungiPannello(c, BorderLayout.WEST, Color.BLUE);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Esercizio per casa
• Ora aggiungete altri due pannelli a nord e a destra
di colore arancione e verde