TUTORIELS 
Java : fenêtre et bouton
Il n'est pas toujours facile de débuter en Java, et parfois, un coup de pouce est nécessaire. Proposition avec la réalisation ludique d'une interface simple.  (19 janvier 2004)
 
Forums
* Discutez en sur les forums
Nous débutons ici une série d'articles permettant aux développeurs ayant du mal à "faire le pas" d'entrer dans le monde de la programmation Java, à l'aide de programmes directement compilables, construits les uns à la suite des autres, et expliqués de la manière la plus accessible possible.
Cette série commence avec la construction d'une simple fenêtre, placée au milieu de la fenêtre, et doté d'un petit texte et d'un bouton. Celui-ci a pour unique fonction de fermer le programme.



Approche
Notre programme est simple : il ne fait qu'afficher des éléments graphiques, accepter le clic d'un bouton et se fermer en conséquence. L'ensemble de notre code tient dans un fichier, FenetreSimpleExec.java .
Les package importés sont donc peu nombreux : java.awt.* et javax.swing.* pour la gestion graphique, et java.awt.event.* pour les évènements.
Pour les lecteurs qui ne savent pas à quoi correspond un package, sachez qu'il s'agit d'un ensemble de classes fournissant des fonctions élaborées. AWT est la package de gestion d'interface historique, Swing est son successeur, mais AWT est encore utile en bien des domaines...

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

Notre classe principale, celle avec laquelle nous lancerons l'affichage de notre interface, s'appelle FenetreSimpleExec, et sert de lanceur à la classe FenetreSimple...

public class FenetreSimpleExec
  {
  public static void main(String[] args)
    {
    FenetreSimple fenetre = new FenetreSimple();
    fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fenetre.show();
    }
  }

Ici, après avoir défini l'objet fenetre, nous lui définissons un comportement de fermeture par défaut, et l'affichons avec show().

class FenetreSimple extends JFrame
  {
  public FenetreSimple()
    {
    Toolkit k = Toolkit.getDefaultToolkit();
    Dimension tailleEcran = k.getScreenSize();
    int largeurEcran = tailleEcran.width;
    int hauteurEcran = tailleEcran.height;

    setTitle("Un programme Java");
    setSize(largeurEcran/4, hauteurEcran/4);
    setLocation(largeurEcran*3/8, hauteurEcran*3/8);

    Contenu monContenu = new Contenu(this);
    Container leContenant = getContentPane();
    leContenant.add(monContenu);
    }
  }

C'est ici que nous construisons physiquement notre fenêtre. Notre classe est ici une extension de JFrame, une classe Swing permettant de construire, donc des fenêtres de haut niveau (le bas niveau correspondant au contenu même), ayant une bordure et un titre.
Ce titre est facilement définit : setTitle() permet de lui donner n'importe quelle chaîne.
Il faut ensuite lui donner une taille, et la place au centre de l'écran. Nous avons choisi de partir de la taille de l'écran pour ces deux informations, que nous pouvons obtenir au moyen de Toolkit. Celui-ci nous donne la taille de l'écran dans un objet de type Dimension, qui contient la largeur et la hauteur.
Nous décidons de donner à notre fenêtre une taille égale au quart de la taille de l'écran. Pour la centrer, nous calculons qu'il nous faut placer les points de départ du dessin de la fenêtre, en haut à gauche, au 3/8 des dimensions de l'écran.
Ceci fait, il nous reste à remplir notre fenêtre : cela sera fait au moyen de la classe Contenu., à laquelle nous envoyons la référence à notre fenêtre (à l'aide de this) pour pouvoir l'utiliser depuis cette autre classe.

class Contenu extends JPanel
  {
  private FenetreSimple maFenetre = null;
  public Contenu(FenetreSimple maFenetre)
    {
    setLayout(new BorderLayout());

    JButton boutonFermer = new JButton("Fermer");
    add(boutonFermer, BorderLayout.SOUTH);

    MyListener myListener = new MyListener();
    this.maFenetre = maFenetre;
    boutonFermer.addActionListener(myListener);
    }

  public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    g.drawString("Mon Texte", 25, 25);
    }

  class MyListener implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
      {
      maFenetre.dispose();
      }
    }
  }

La classe Contenu est donc une extension de JPanel, encore une classe Swing, cette fois permettant le construction de "panneau" (le contenu même). Le constructeur de cette classe, comme prévu, reçoit en argument un objet de type FenetreSimple. Nous y créons un bouton, appelé boutonFermer et avec un texte idoine, et l'ajoutons à l'interface, en le plaçant au "sud" de notre interface, par l'entremise du gestionnaire BorderLayout, qui se charge plus particulièrement de la mise en forme de notre interface.
Notre petit texte est ensuite placé, via les méthodes paintComponent() et drawString().

Il nous faut ensuite gérer les évènements. Pour cela, nous ferons appel à l'interface ActionListener pour créer un "écouteur d'évènement". Celle-ci comprend ici une simple méthode, actionPerformed, qui appelle la méthode dispose() de notre objet maFenetre, transmis depuis FenetreSimple. Cet écouteur est ensuite attaché au bouton boutonFermer à l'aide de la méthode addActionListener...

Ceci fait, notre projet est prêt à être compilé et lancé.

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page