ISET Bizerte 2014/2015
RSI2/DSI2
Exercice 1
Ecrire un programme permettant de calculer la surface et le périmètre d’un rectangle.
Faire les contrôles de saisie pour le champ longueur et largeur.
Solution 1 :
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class FenRectangle extends JFrame{
private JTextField txtLargeur;
private JTextField txtResultat;
private JTextField txtLongueur;
JButton btnSurface, btnPrimtre;
public FenRectangle() {
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);
1
ISET Bizerte 2014/2015
RSI2/DSI2
p1.add(txtLongueur);
JPanel p2 = new JPanel();
getContentPane().add(p2);
JLabel lblLargeur = new JLabel("Largeur ");
p2.add(lblLargeur);
txtLargeur = new JTextField();
p2.add(txtLargeur);
txtLargeur.setColumns(10);
JPanel p3 = new JPanel();
getContentPane().add(p3);
btnSurface = new JButton("Surface");
btnSurface.addActionListener(new ActionListener1());
p3.add(btnSurface);
JButton btnPrimtre = new JButton("P\u00E9rim\u00E8tre");
btnPrimtre.addActionListener(new ActionListener2());
p3.add(btnPrimtre);
JPanel p4 = new JPanel();
getContentPane().add(p4);
txtResultat = new JTextField();
p4.add(txtResultat);
txtResultat.setColumns(15);
txtResultat.setEditable(false);
}
class ActionListener1 implements ActionListener{
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));
}
}
class ActionListener2 implements ActionListener{
2
ISET Bizerte 2014/2015
RSI2/DSI2
public void actionPerformed(ActionEvent arg0) {
double l1=0,l2=0;
if (isDouble(txtLongueur.getText(), "longueur"))
l1=Double.parseDouble(txtLongueur.getText());
Publicité
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);
}
}
private boolean isDouble(String ch, String nom){
try{
double a=Double.parseDouble(ch);
return true;
}
catch(NumberFormatException e) {
pour "+nom, "erreur", JOptionPane.WARNING_MESSAGE);
return false;
JOptionPane.showMessageDialog(null,"Entrer une valeur numérique
}
}
}
public class Rectangle{
public static void main(String []args){
FenRectangle fen=new FenRectangle();
fen.setVisible(true);
}
}
Solution 2 :
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class FenRectangle1 extends JFrame implements ActionListener{
private JTextField txtLargeur;
private JTextField txtResultat;
private JTextField txtLongueur;
JButton btnSurface, btnPrimtre;
public FenRectangle1() {
setTitle("Rectangle");
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
3
ISET Bizerte 2014/2015
RSI2/DSI2
Container c=getContentPane();
c.setLayout(new BorderLayout());
JPanel p1=new JPanel(new GridLayout(3, 2, 5, 5));
JLabel lblLongueur = new JLabel("Longueur");
p1.add(lblLongueur);
txtLongueur=new JTextField();
txtLongueur.setColumns(10);
p1.add(txtLongueur);
JLabel lblLargeur = new JLabel("Largeur ");
p1.add(lblLargeur);
txtLargeur = new JTextField();
p1.add(txtLargeur);
txtLargeur.setColumns(10);
btnSurface = new JButton("Surface");
btnSurface.addActionListener(this);
p1.add(btnSurface);
btnPrimtre = new JButton("P\u00E9rim\u00E8tre");
btnPrimtre.addActionListener(this);
p1.add(btnPrimtre);
c.add(p1, BorderLayout.NORTH);
txtResultat = new JTextField();
JPanel p2=new JPanel(new BorderLayout());
p2.add(txtResultat);
c.add(p2, BorderLayout.SOUTH);
txtResultat.setColumns(15);
txtResultat.setHorizontalAlignment(JTextField.CENTER);
txtResultat.setEditable(false);
}
public void actionPerformed(ActionEvent e) {
double l1=0,l2=0;
Publicité
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;
}
if (e.getSource()==btnSurface)
txtResultat.setText("La surface est: "+ (l1*l2));
txtResultat.setText("Le périmètre est: "+ (l1*l2));
else
}
private boolean isDouble(String ch, String nom){
try{
}
double a=Double.parseDouble(ch);
return true;
4
ISET Bizerte 2014/2015
RSI2/DSI2
catch(NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Entrer une valeur numérique
pour "+nom, "erreur", JOptionPane.WARNING_MESSAGE);
return false;
}
}
}
public class Rectangle1{
public static void main(String []args){
FenRectangle1 fen=new FenRectangle1();
fen.setVisible(true);
}
}
Exercice 2
Écrire un programme affichant dans une fenêtre des boutons dont les étiquettes sont des noms
de langages sélectionnés dans une boîte de liste. La liste permettra de sélectionner un nombre
quelconque de plages de valeurs. Les noms des langages seront fixés dans la méthode main
(et non dans la fenêtre). On proposera deux solutions :
• une où la sélection sera validée par l’action sur un bouton OK :
• une où les boutons affichés dans la fenêtre seront actualisés à chaque modification de la
sélection dans la liste (il n’y aura plus de bouton OK).
5
ISET Bizerte 2014/2015
RSI2/DSI2
Solution 1 :
import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;
class MaFenetre extends JFrame implements ActionListener
{ public MaFenetre (String noms[])
{ setTitle ("Liste") ;
setSize (300, 220) ;
Container contenu = getContentPane() ;
liste = new JList (noms) ;
contenu.add (liste, "West") ;
ok = new JButton ("OK") ;
contenu.add (ok, "South") ;
ok.addActionListener (this) ;
pan = new JPanel () ;
contenu.add (pan) ;
}
public void actionPerformed (ActionEvent e)
{ if (e.getSource() == ok)
{ pan.removeAll () ; // supprime tous les composants de pan
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() ;
}
}
Publicité
private JList liste ;
private JButton ok ;
private JPanel pan ;
}
public class ListeMenu {
public static void main (String args[])
{ String [] nomsLangages = {"Java", "C", "C++", "Pascal", "Basic", "Cobol",
"Fortran"} ;
MaFenetre fen = new MaFenetre(nomsLangages) ;
fen.setVisible(true) ;
}
}
Solution 2
import java.awt.* ;
import javax.swing.event.* ;
import javax.swing.* ;
class ListeBouton extends JFrame implements ListSelectionListener
{ public ListeBouton (String noms[])
{ setTitle ("Liste") ;
setSize (300, 220) ;
Container contenu = getContentPane() ;
liste = new JList (noms) ;
contenu.add (liste, "West") ;
liste.addListSelectionListener(this);
pan = new JPanel () ;
6
ISET Bizerte 2014/2015
RSI2/DSI2
contenu.add (pan) ;
}
public void valueChanged (ListSelectionEvent e)
{ if (!e.getValueIsAdjusting())
{ pan.removeAll () ; // supprime tous les composants de pan
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() ;
}
}
private JList liste ;
private JButton ok ;
private JPanel pan ;
}
public class ListeMenu1 {
public static void main (String args[])
{ String [] nomsLangages = {"Java", "C", "C++", "Pascal", "Basic", "Cobol",
"Fortran"} ;
JFrame fen = new ListeBouton(nomsLangages) ;
fen.setVisible(true) ;
}
}
Exercice 3
Créer une fenêtre disposant d’une barre de menus dotée de deux menus Dimensions et Calcul
destinés à effectuer des calculs de périmètre et d’aire de rectangles dont on fournit la
longueur et la largeur.
Le menu Dimensions comportera les options :
• Nouvelle longueur qui demandera à l’utilisateur d’entrer dans une boîte de saisie un entier
représentant une longueur,
• Nouvelle largeur qui demandera à l’utilisateur d’entrer dans une boîte de saisie un entier
représentant une largeur,
• Dimensions actuelles qui affichera dans une boîte de message les valeurs courantes de la
longueur et de la largeur
Le menu Calculs comportera les options Perimètre et Aire qui afficheront l’information
requise dans une boîte de message
Solution
import java.awt.*;
import java.awt.event.* ;
import javax.swing.* ;
import javax.swing.event.* ;
class FenMenu extends JFrame implements ActionListener{
7
ISET Bizerte 2014/2015
RSI2/DSI2
JMenuBar barMenu;
JMenu dimensions, calculs;
JMenuItem nvLong, nvLarg, dimAct, perimetre, aire;
private int longueur, largeur;
Publicité
FenMenu(){
super("CALCULS sur des rectangles");
setSize(400,200);
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);
}
@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)
"+longueur*largeur);
JOptionPane.showMessageDialog(null, "L'aire est
}
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
8
ISET Bizerte 2014/2015
RSI2/DSI2
ok=true;
}
catch(NumberFormatException er){
JOptionPane.showMessageDialog(null, "Entrer un entier",
"Erreur", JOptionPane.WARNING_MESSAGE);
}
}while(!ok);
return n;
}
}
public class MenuExercice1 {
public static void main(String []args){
JFrame fen=new FenMenu();
fen.setVisible(true);
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
9