Programming Exercises in Java

Ce laboratoire propose plusieurs exercices de programmation en Java visant à développer des interfaces graphiques pour calculer des propriétés géométriques de rectangles et manipuler des listes interactives. Les étudiants apprendront à créer des fenêtres avec Swing, gérer des événements, valider des saisies et mettre à jour dynamiquement des composants graphiques.

D'après le document Programming Exercises in Java

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source

Programming Exercises in Java

Software Development · Institut Supérieur des Études Technologiques · PDF · 9 pages · 2014

Afficher l'aperçu du document

Consulter le document original →

Ce laboratoire propose plusieurs exercices de programmation en Java visant à développer des interfaces graphiques pour calculer des propriétés géométriques de rectangles et manipuler des listes interactives. Les étudiants apprendront à créer des fenêtres avec Swing, gérer des événements, valider des saisies et mettre à jour dynamiquement des composants graphiques. Pour réaliser ces exercices, un environnement Java avec Swing est nécessaire.

Objectifs

  • Créer une interface graphique pour calculer la surface et le périmètre d’un rectangle.
  • Valider les saisies utilisateur pour garantir des entrées numériques correctes.
  • Gérer des événements liés à des boutons et des menus dans une fenêtre Swing.
  • Manipuler une liste de sélection multiple et afficher dynamiquement des boutons correspondant aux éléments sélectionnés.
  • Utiliser une barre de menus pour interagir avec l’utilisateur et effectuer des calculs.

Prérequis et installation

  • Connaissances de base en Java, notamment la programmation orientée objet.
  • Notions sur les interfaces graphiques avec Swing (JFrame, JButton, JTextField, JPanel, JList, JMenuBar, etc.).
  • Environnement de développement Java configuré avec support Swing (JDK et IDE recommandés).
  • Compréhension des gestionnaires d’événements (ActionListener, ListSelectionListener).

Exercice 1 : Calcul de surface et périmètre d’un rectangle

Dans cet exercice, vous devez créer un programme Java avec une interface graphique permettant de saisir la longueur et la largeur d’un rectangle, puis calculer et afficher sa surface ou son périmètre selon le bouton cliqué. La saisie doit être contrôlée pour accepter uniquement des valeurs numériques.

Étape 1 : Création de la fenêtre et des champs de saisie

Créez une classe héritant de JFrame. Ajoutez deux JTextField pour la longueur et la largeur, ainsi que deux boutons "Surface" et "Périmètre". Un champ non éditable affichera le résultat.

setTitle("Rectangle");
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridLayout(4, 1, 5, 5));

JPanel p1 = new JPanel();
getContentPane().add(p1);
JLabel lblLongueur = new JLabel("Longueur");
p1.add(lblLongueur);
txtLongueur = new JTextField();
txtLongueur.setColumns(10);
p1.add(txtLongueur);

JPanel p2 = new JPanel();
getContentPane().add(p2);
JLabel lblLargeur = new JLabel("Largeur");
p2.add(lblLargeur);
txtLargeur = new JTextField();
txtLargeur.setColumns(10);
p2.add(txtLargeur);

JPanel p3 = new JPanel();
getContentPane().add(p3);
btnSurface = new JButton("Surface");
btnSurface.addActionListener(new ActionListener1());
p3.add(btnSurface);
btnPrimtre = new JButton("Périmètre");
btnPrimtre.addActionListener(new ActionListener2());
p3.add(btnPrimtre);

JPanel p4 = new JPanel();
getContentPane().add(p4);
txtResultat = new JTextField();
txtResultat.setColumns(15);
txtResultat.setEditable(false);
p4.add(txtResultat);

Ce code crée la fenêtre avec les champs et boutons nécessaires.

Étape 2 : Validation des saisies

Implémentez une méthode isDouble(String ch, String nom) qui tente de convertir la chaîne en double. En cas d’erreur, affichez un message d’alerte et retournez false.

private boolean isDouble(String ch, String nom){
  try {
    double a = Double.parseDouble(ch);
    return true;
  } catch(NumberFormatException e) {
    JOptionPane.showMessageDialog(null, "Entrer une valeur numérique pour " + nom, "erreur", JOptionPane.WARNING_MESSAGE);
    return false;
  }
}

Cette méthode est utilisée avant de convertir les valeurs saisies.

Étape 3 : Calcul de la surface

Dans le gestionnaire d’événements du bouton "Surface", récupérez les valeurs saisies, validez-les, puis calculez la surface et affichez le résultat.

public void actionPerformed(ActionEvent arg0) {
  double l1 = 0, l2 = 0;
  if (isDouble(txtLongueur.getText(), "longueur"))
    l1 = Double.parseDouble(txtLongueur.getText());
  else {
    txtLongueur.setText("");
    txtLongueur.requestFocus();
    return;
  }
  if (isDouble(txtLargeur.getText(), "largeur"))
    l2 = Double.parseDouble(txtLargeur.getText());
  else {
    txtLargeur.setText("");
    txtLargeur.requestFocus();
    return;
  }
  txtResultat.setText("La surface est: " + (l1 * l2));
}

Étape 4 : Calcul du périmètre

De manière similaire, dans le gestionnaire du bouton "Périmètre", calculez et affichez le périmètre.

public void actionPerformed(ActionEvent arg0) {
  double l1 = 0, l2 = 0;
  if (isDouble(txtLongueur.getText(), "longueur"))
    l1 = Double.parseDouble(txtLongueur.getText());
  else {
    txtLongueur.setText("");
    txtLongueur.requestFocus();
    return;
  }
  if (isDouble(txtLargeur.getText(), "largeur"))
    l2 = Double.parseDouble(txtLargeur.getText());
  else {
    txtLargeur.setText("");
    txtLargeur.requestFocus();
    return;
  }
  txtResultat.setText("Le périmètre est: " + (l1 + l2) * 2);
}

Exercice 2 : Affichage dynamique de boutons selon une sélection dans une liste

Ce programme affiche une liste de noms de langages de programmation. Selon la sélection, des boutons portant ces noms sont affichés dans la fenêtre. Deux solutions sont proposées : une avec un bouton OK pour valider la sélection, l’autre avec mise à jour instantanée.

Solution 1 : Validation par bouton OK

Créez une fenêtre avec une JList contenant les noms, un bouton OK et un panneau pour afficher les boutons générés.

public void actionPerformed(ActionEvent e) {
  if (e.getSource() == ok) {
    pan.removeAll(); // supprime tous les composants
    Object[] noms = liste.getSelectedValuesList().toArray();
    for (int i = 0; i < noms.length; i++) {
      JButton bouton = new JButton((String)noms[i]);
      pan.add(bouton);
    }
    pan.validate();
  }
}

Le panneau est mis à jour uniquement après clic sur OK.

Solution 2 : Mise à jour instantanée

Utilisez un ListSelectionListener pour détecter les changements de sélection et mettre à jour immédiatement les boutons affichés.

public void valueChanged(ListSelectionEvent e) {
  if (!e.getValueIsAdjusting()) {
    pan.removeAll();
    Object[] noms = liste.getSelectedValuesList().toArray();
    for (int i = 0; i < noms.length; i++) {
      JButton bouton = new JButton((String)noms[i]);
      pan.add(bouton);
    }
    pan.validate();
  }
}

Exercice 3 : Barre de menus pour calculs sur rectangles

Ce programme crée une fenêtre avec une barre de menus comportant deux menus : "Dimensions" et "Calculs". L’utilisateur peut entrer la longueur et la largeur via des boîtes de saisie, afficher les dimensions actuelles, et calculer le périmètre ou l’aire via des options de menu.

Étape 1 : Création de la barre de menus

Initialisez la barre de menus et ajoutez les menus et leurs options.

barMenu = new JMenuBar();
setJMenuBar(barMenu);
dimensions = new JMenu("Dimensions");
calculs = new JMenu("Calculs");
barMenu.add(dimensions);
barMenu.add(calculs);

nvLong = new JMenuItem("Nouvelle longueur");
nvLarg = new JMenuItem("Nouvelle largeur");
dimAct = new JMenuItem("Dimensions actuelles");
perimetre = new JMenuItem("Périmètre");
aire = new JMenuItem("Aire");

dimensions.add(nvLong);
dimensions.add(nvLarg);
dimensions.add(dimAct);
calculs.add(perimetre);
calculs.add(aire);

nvLong.addActionListener(this);
nvLarg.addActionListener(this);
dimAct.addActionListener(this);
perimetre.addActionListener(this);
aire.addActionListener(this);

Étape 2 : Gestion des actions du menu

Dans la méthode actionPerformed, gérez chaque option :

  • Nouvelle longueur : demandez un entier positif via une boîte de saisie.
  • Nouvelle largeur : idem pour la largeur.
  • Dimensions actuelles : affichez la longueur et la largeur courantes.
  • Périmètre : affichez le périmètre calculé.
  • Aire : affichez l’aire calculée.
@Override
public void actionPerformed(ActionEvent e) {
  if (e.getSource() == nvLong)
    longueur = lire("Donner la nouvelle longueur");
  if (e.getSource() == nvLarg)
    largeur = lire("Donner la nouvelle largeur");
  if (e.getSource() == dimAct)
    JOptionPane.showMessageDialog(null, "Longueur= " + longueur + ", largeur= " + largeur);
  if (e.getSource() == perimetre)
    JOptionPane.showMessageDialog(null, "Le périmètre est " + (longueur + largeur) * 2);
  if (e.getSource() == aire)
    JOptionPane.showMessageDialog(null, "L'aire est " + longueur * largeur);
}

Étape 3 : Méthode de lecture sécurisée

La méthode lire(String question) demande à l’utilisateur d’entrer un entier positif, avec contrôle de validité et gestion des erreurs.

public int lire(String question) {
  int n = 0;
  boolean ok = false;
  do {
    String ch = JOptionPane.showInputDialog(null, question);
    if (ch == null)
      break;
    try {
      n = Integer.parseInt(ch);
      if (n < 0)
        JOptionPane.showMessageDialog(null, "Entrer une valeur positive");
      else
        ok = true;
    } catch(NumberFormatException er) {
      JOptionPane.showMessageDialog(null, "Entrer un entier", "Erreur", JOptionPane.WARNING_MESSAGE);
    }
  } while (!ok);
  return n;
}

Résultats attendus

  • Exercice 1 : La fenêtre affiche correctement la surface ou le périmètre calculé après saisie de valeurs numériques valides. En cas d’erreur de saisie, un message d’alerte apparaît et le champ est remis à vide.
  • Exercice 2 : Les boutons correspondant aux langages sélectionnés apparaissent dans le panneau. Dans la première solution, ils s’affichent après clic sur OK. Dans la deuxième, ils se mettent à jour instantanément à chaque changement de sélection.
  • Exercice 3 : La barre de menus fonctionne, les saisies de longueur et largeur sont contrôlées, et les calculs de périmètre et d’aire s’affichent correctement dans des boîtes de dialogue.

Pièges courants

  • Ne pas valider les saisies numériques peut provoquer des exceptions et planter le programme.
  • Oublier de remettre le focus sur le champ de saisie après une erreur empêche une correction rapide.
  • Dans l’exercice 2, ne pas appeler pan.validate() ou repaint() après modification du panneau empêche la mise à jour visuelle.
  • Dans l’exercice 3, ne pas gérer le cas où l’utilisateur annule la saisie (valeur null) peut provoquer des erreurs.
  • Confondre les opérateurs dans le calcul du périmètre (il faut multiplier la somme des côtés par 2).

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions