Interface graphique§

Pour commencer§

Packages§

Hello World§

import javax.swing.*;       
public class HelloWorldSwing implements Runnable {
    @Override 
    public void run() {
        //Create the window
        JFrame f = new JFrame("HelloWorldSwing");
	//Set the behavior for when the window is closed
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Add a label
        f.getContentPane().add(new JLabel("Hello world!"));
        //Set the window size from its components size 
        f.pack();
        //By default, the window is not visible; make it visible
        f.setVisible(true);
    }
    public static void main(String[] args) {
	//Run the application at the correct time in the event queue
        SwingUtilities.invokeLater( new HelloWorldSwing() );  
    }
}

Event-Dispatching Thread§

Structure d'une fenêtre§

Hiérarchie de conteneurs§

Le nom des conteneurs de javax.swing commencent par J.

Chaque application graphique possède au moins un conteneur de haut-niveau:

Ces conteneurs possèdent un panneau d'affichage (accessible par getContentPane(), setContentPane()) sur lequel vous pouvez disposer des composants (qui dérivent de JComponent).

Composants graphiques§

Il existe de nombreux composants graphiques:
  • JPanel (conteneur générique léger)
  • JLabel (étiquette de texte)
  • JButton (bouton)
  • JTextField (champs texte pouvant être éditable)
  • JMenuBar (barre des menus)
  • ...

Consultez l'API standard pour la liste des composants disponibles dans javax.swing.

Personnaliser le panneau d'affichage§

Habituellement, on crée un nouveau panneau d'affichage de zéro en utilisant JPanel, puis on l'ajoute au conteneur de haut niveau (typiquement de type JFrame) avec setContentPane().

//Create a panel and add components to it.
JPanel contentPane = new JPanel();
contentPane.add(someComponent);
contentPane.add(anotherComponent);

topLevelContainer.setContentPane(contentPane);

Layout Manager§

Il existe des modèles pour disposer les composants graphiques sur un panneau d'affichage:

Consultez la page des layout managers pour avoir un aperçu de ces modèles.

Utiliser un Layout Manager§

Le modèle par défaut est FlowLayout. Mais il est très simple d'en utiliser un autre en le passant en paramètre, soit au constructeur de JPanel, soit à la méthode setLayout().

JPanel contentPane = new JPanel(new BorderLayout());
//or:
//JPanel contentPane = new JPanel();
//contentPane.setLayout( new BorderLayout() );

contentPane.add(someComponent, BorderLayout.CENTER);
contentPane.add(anotherComponent, BorderLayout.PAGE_END);

topLevelContainer.setContentPane(contentPane);

Ex.1. Calculatrice/Structure (20 min)§

Reproduisez la fenêtre suivante:

Capture d'ecran du modèle

Ex.1. Détails§

Gestion des evénements§

Fonctionnement général§

Exemple de Listener§

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

/*
 * Button listener
 */
public class ButtonBeeper implements ActionListener {

    @Override 
    public void actionPerformed(ActionEvent e) {
	//print 'beep' to the standard output
	//when an action event is received
	System.out.println("beep"); 
    }

}

Exemple d'application§

import javax.swing.*;       
public class BeeperApp implements Runnable {
    @Override 
    public void run() {
        //Create the window.
        JFrame f = new JFrame("Beeper");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Add a button with an action listener
	JButton b = new JButton("Click me"); 
	b.addActionListener( new ButtonBeeper() ); 
        f.getContentPane().add(b);
	//Display the window.
        f.pack();
        f.setVisible(true);
    }
    public static void main(String[] args) {
	//Run the application at the correct time in the event queue.
        SwingUtilities.invokeLater( new BeeperApp() );  
    }
}

Quelques types d'évenement§

Consultez l'API standard pour la liste des événements disponibles dans java.awt.event, le tutoriel Evénements, ainsi que les How To consacrés aux composants pour savoir quel type d'événement ils déclenchent.

ActionEvent / ActionListener§

Le couple ActionEvent / ActionListener est le plus commun.

Ex.2. Calculatrice/Evenements (30 min)§

Ce qu'il faut retenir§

Ce que vous devez savoir faire§

Réaliser une application graphique qui réagit aux actions de l'utilisateur.