Faculté des Sciences de Rabat Interface Homme Machine
Université Mohammed V de Rabat ‘Année Universitaire 2019/2020
ye Département Informatique SMI-S6
TP6
Conteneurs intermédiaires
‘Swing propose plusieurs conteneurs intermédiaires, le but d'un conteneur
intermédiaire est de faciliter le positionnement du composant que contienne
"application. Il existe plusieurs types de conteneurs intermédiaires, comme le panel
(Classe JPanel), les panneaux de défilements (classe JScrollPane), les panneaux a
onglets (classe JTabbedPane), etc...
Conteneur - JPanel
JPanel est un conteneur générique qui permet de contenir d'autres composants dont
d'autres JPanel. Son gestionnaire de placement par défaut est FlowLayout. L'exemple
suivant permet de voir comment utiliser un conteneur intermédiaire de type JPanel
class Adresse extends JPanel {
public Adresse() {
super ();
JLabel eNom = new JLabel("Nom : ");
JLabel ePrenom = new JLabel("Prénom : ");
JLabel eAdresse = new JLabel("Adresse : ");
JTextField tNom = new JTextField (8) ;
JTextField tPrenom = new JTextField(8) ;
JTextArea tAdresse = new JTextArea("Lahoucine", 4, 20);
add (eNom) ;
add (tNom) ;
add (ePrenom) ;
add (tPrenom) ;
add (eAdresse) ;
add (tAdresse) ;
Me
}
public class JPanelExemple {
public static void main(String[] args) {
JFrame cadre = new JFrame();
Adresse identite = new Adresse() ;
[Link](identite); // ou [Link](identite) ;
cadre. pack () ;
cadre. setDefaultCloseOperation (3) ;
cadre. setTitle("Identité") ;
cadre. setVisible(true) ;
)
,
© Compilez puis exécutez ce programme.
Professeur Lahoucine BALLIHIFaculté des Sciences de Rabat Interface Homme Machine
Université Mohammed V de Rabat ‘Année Universitaire 2019/2020
ye Département Informatique SMI-S6
Conteneur - JScrollPane
Un JScrollPane est un conteneur qui offre des ascenseurs, il permet de visionner un
composant plus grand que lui comme par exemple insertion d'une photo a haute
résolution dans une étiquette (probleme que nous avons rencontré dans le TP
précédent), L'exemple suivant permet de voir comment utiliser un conteneur
intermédiaire de type JScrollPane
public class JScrollPaneExemple {
public JScrollPaneExemple() {
JFrame cadre = new JFrame() ;
Jhabel eImage = new JLabel (new Tmagelcon(" . /img/nimage. JPG") ) ;
JScrol1Pane pDefilement = new JScrol1Pane (eImage) ;
cadre. setContentPane(pDefilement) ; // ou [Link] (pDefilement) ;
cadre. setTitle("Le chemin par Google Map !");
cadre. setSize(400, 400) ;
cadre. setDefaultClosedperation (3) ;
cadre. setResizable(faise); // true laisse 1a possibilite de
// redimensionnement
cadre. setVisible (true) ;
ye
public static void main(String[] args) {
new JScrol1PaneExemple() ;
}
)
‘© Compilez pnis exécutez ce programme
Conteneur - JSplitPane
Un JSplitPane est un panel coupé en deux par une barre de séparation, cette
séparation peut étre horizontale ou verticale. Un JSplitPane accueil deux composants.
L’exemple suivant illustre comment utiliser un conteneur intermédiaire de type
JSplitPane.
public class JsplitPaneExemple {
public JSplitPaneExemple() {
JPrane cadre = new JFrame() ;
Uhabel eInage = new JLabel (new InageIcon("". /img/[Link]")) ;
JTextarea ta = new JTextArea(texte, 20, 10);
[Link](true); // passage automatique a la ligne
JSplitPane pSeparation = new
‘JsplitPane (JSplitPane HORIZONTAL SPLIT, ta, eImage) ;
7/ ow VERTICAL SPLIT
cadre. setContentPane (pSeparation) ; // ou [Link](pSeparation) ;
cadre. setTitle("Le chemin par Google Map !");
cadre pack ()
cadre. setDefaultClosedperation (3) ;
cadre setResizable(true); // autoriser le redimensionnenent
cadre. setVisible (true) ;
)
static String texte = "Il ne faut pas se fier aveuglément a la
Professeur Lahoucine BALLIHIFaculté des Sciences de Rabat Interface Homme Machine
Université Mohammed V de Rabat Année Universitaire 2019/2020
w Département Informatique SMI-S6
technologie. Un chauffeur qui a été guidé par
la géolocalisation de Google !
public static void main(String[] args) {
new JsplitPaneExemple () ;
)
}
‘© Compilez puis exécutez ce programme
Conteneur - JTabbedPane
Le JTabbedPane est un conteneur qui contient d'autres conteneurs; la navigation
entre ces différents conteneurs se faisant par des onglets. Les onglets de navigation
peuvent étre positionnés & gauche, en haut, a droite ou en bas. Voici un exemple de
JTabbedPane avec deux onglets identité et études.
public class JTabbedPaneExemplel {
public JTabbedPaneExemplel() {
JFrame cadre = new JFrame();
JTabbedPane pOnglets = new JTabbedPane (JTabbedPane. TOP) ;
/Ipar défaut
JLabel nom = new JLabel(" Nom : ");
JTextField tNom = new JTextField(10) ;
JLabel prenom = new JLabel(" Prénom : ");
JTextField tPrenom = new JTextField(10) ;
JPanel identite = new JPanel();
identi [Link] (nom) ;
[Link](tNom) ;
identi te. add (prenom) ;
identi [Link](tPrenom) ;
[Link](" Identité ", identite);
// ajout d'un ler panneau
JLabel niveau = new JLabel(" Niveau : ");
JTextField tNiveau = new JTextField(10) ;
JLabel annee = new JLabel(" Année : "
JTextField tAnnee = new JTextField (10)
JPanel etudes = new JPanel();
etudes add (niveau) ;
etudes add (tNiveau) ;
etudes . add (anne) ;
etudes add (tAnnee) ;
[Link](" Etudes ", etudes) ;
// ajout d'un 2éme panneau
cadre. add (ponglets)
[Link]("Saisie d'informations") ;
[Link](); // 1a taille depend du plus grand onglet
cadre. setDefaultCloseOperation (3) ;
cadre. setResizable (false) ;
7/ bloquer le changement de la taille
cadre. setVisible (true) ;
}
public static void main(String[] args) {
new JTabbedPaneExemplel () ;
] Professeur Lahoucine BALLIHIFaculté des Sciences de Rabat Interface Homme Machine
Université Mohammed V de Rabat Année Universitaire 2019/2020
w Département Informatique SMI-S6
ilez puis exécutez ce programme.
‘* Voici un autre exemple de JTabbedPane avec quatre onglets dont chaque onglet
contient une image.
public class JTabbedPaneExemple2 {
public JTabbedPaneExemple2() {
JFrame cadre = new JFrame ();
JTabbedPane pOnglets = new JTabbedPane () ;
JLabel eImagel = new JLabel(new ImageIcon("./img/[Link] "));
JPanel imagel = new JPanel();
image .add(eImagel) ;
[Link](" Photo 1", imagel) ;
Label elmage2 = new JLabel(new ImageIcon("./img/[Link] "));
panel image2 = new JPanel () ;
image? add (eImage2) ;
[Link](" Photo 2", image2) ;
JLabel eImage3 = new JLabel(new ImageIcon("./img/[Link] "));
JPanel image3 = new JPanel ();
image3 . add (eImage3) ;
[Link](" Photo 3 ", image3) ;
JLabel eImage4 = new JLabel(new ImageTcon("./img/[Link] "));
JPanel image4 = new JPanel ();
imaged .add(eImage4) ;
[Link](" Photo 4", image4) ;
cadre. setContentPane (pOnglets) ;
cadre. setTitle ("Album photos") ;
[Link] () ;
cadre. setDefaultCloseOperation (3) ;
cadre. setResizable (true) ;
cadre. setVisible (true) ;
M
)
© Compilez puis exécutez ce programme.
Conteneur — JToolBar
JToolBar est un conteneur intermédiaire qui permet de réaliser une barre d'outils
contenant les actions les plus utilisées d'une application. L'utilisateur peut déplacer ce
composant dans une fenétre séparée
public class JToolBarExemplel {
public JToolBarExemplel() {
gButton bouvrir = new JButton(new ImageIcon("[Link]")) ;
Button bEnregistrer = new JButton (new ImageIcon("[Link]")) ;
gButton bCouper = new JButton(new ImageIcon("[Link]")) ;
Button bCopier = new JButton(new ImageIcon("[Link]")) ;
JButton bColler = new JButton(new ImageIcon("[Link]")) ;
[Link] ("Ouvrir un fichier") ;
Professeur Lahoucine BALLIHIUniversité Mohammed V de Rabat ‘Année Universitaire 2019/2020
w Faculté des Sciences de Rabat Interface Homme Machine
Département Informatique SMI-S6
// ajout de bulles d'aide
[Link] ("Enregistrer le fichier") ;
[Link] ("Couper vers le presse papier") ;
[Link] ("Copier vers le presse papier") ;
[Link] ("Coller depuis le presse papier");
JToolBar tb = new JToolBar() ;
[Link] (bouvrir) ;
[Link] (bEnregistrer) ;
[Link](); // ajout d'une barre de séparation
[Link](bCouper) ;
[Link] (bCopier) ;
[Link](bColler) ;
JPanel panneau = new JPanel (
[Link] (new BorderLayout ()) ;
[Link](tb, BorderLayout .NORTH) ;
JFrame cadre = new JFrame();
cadre. add(panneau) ;
cadre. setTitle("Barre d'outils") ;
[Link](600, 400);
cadre. setDefaultCloseOperation (3) ;
cadre. setVisible (true) ;
ye
public static void main(String{] args) {
new JToolBarExemplel () ;
,
}
Compilez puis exécutez ce programme.
Pour déplacer cette barre de menu, utilisez la méthode setFloatable(boolean).
On peut construire une barre de menu avec des composants de différents types. Soit le
programme suivant :
public class JToolBarExemple2 {
public JToolBarExemple2() {
JToolBar tb = new JToolBar() ;
[Link](true); // true par défaut
[Link](new JButton ("Ouvriz"));
[Link](new JButton ("Enregistrer")) ;
[Link] () ;
Icon ic = new ImageIcon(". /img/[Link]") ;
[Link](new JButton("Java", ic)
[Link] (new JRadioBut tonMenul tem ("ON/OF")) ;
JFrame cadre = new JFrame ();
[Link](tb, BorderLayout .PAGE_END) ;
// en bas de page ou par défaut en haut : PAGE START
[Link]("Barre d'outils (2)");
cadre. setSize (600, 200);
cadre. setDefaultClose0peration (3) ;
cadre. setVisible (true) ;
h
)
© Compilez puis exécutez ce programme.
Professeur Lahoucine BALLIHIFaculté des Sciences de Rabat Interface Homme Machine
Université Mohammed V de Rabat Année Universitaire 2019/2020
ye Département Informatique SMI-S6
Conteneur — JDesktopPane
JDesktopPane est un conteneur qui est fait pour gérer les JInternalFrame. Ces
composants peuvent étre déplacés, redimensionnés, minimisés, etc. II dérive de
JLayeredPane(voir plus tard) et il n'utilise pas de gestionnaire de disposition. Soit le
programme suivant :
public class JDesktopPaneExemplel {
public static void main(String[] args) {
boolean resizable = true;
boolean closeable = true;
boolean maximizable = true;
boolean iconifiable = true;
String title = "Cadre interne";
JinternalFrame icadre = new JInternalFrame(title,
resizable, closeable, maximizable, iconifiable) ;
[Link] (300, 300);
[Link](true) ;
[Link](new JTextArea());
UDesktopPane desktop = new JDesktopPane() ;
desktop. add (icadre) ;
Jerame f = new JFrame("Cadre externe") ;
£.add (desktop) ;
£.setSize (400, 400) ;
£.setVisible (true) ;
}
}
‘© Compilez puis exécutez ce programme.
© Notez qu’on peut aussi créer plusieurs JInternalFrame. Soit le programme suivant :
class CadreMDI extends JInternalFrame {
public CadremDr() {
super("", true, true, true, true);
}
public void setImage (String nomImage) {
JPanel p = new JPanel ();
JLabel uneImage = new JLabel (new ImageIcon (nomImage) ) ;
[Link](uneImage) ;
[Link](p) ;
this .setTitle (nomImage) ;
,
}
public class JDesktopPaneExemple2 extends JDesktopPane {
CadreMDI[] images;
String[] nomsFichier = { "./img/[Link]", "./img/[Link]",
-/img/[Link]", "./img/[Link]",
-/img/5..SPG"} ;
public JDesktopPaneExemple2() {
super ();
images = new CadreMDI [nomsFichier. length] ;
Professeur Lahoucine BALLIHIFaculté des Sciences de Rabat Interface Homme Machine
w Université Mohammed V de Rabat Année Universitaire 2019/2020
}
Département Informatique SMI-S6
for (int i = 0; i < [Link]; itt) {
images [i] = new CadreMDI();
images [i] .setSize(200, 200);
images [i].setLocation(100 * i, 50 * i);//effet 3D!
images [i] .setImage (nomsFichier[i]) ;
images [i] .setVisible (true) ;
this .add(images[i])
}
public static void main(String[] args) {
}
}
JFrame £ = new JFrame();
£.add (new JDesktopPaneExemple2 ()) ;
£.setDefaultCloseOperation (3) ;
£,setVisible (true) ;
£.setSize (500, 500) ;
£.setTitle("Afficheur d'images") ;
© Compilez puis exécutez ce programme,
Conteneur — JLayeredPane
JLayeredPane est un conteneur qui permet de gérer des composants disposés sur
plusieurs couches. A chaque composant de ce conteneur sont associés deux entiers
appelés niveau (layer) et position (position). Ces deux entiers définissent ordre
d'empilement des composants contenus dans le panneau. Soit I'exemple suivant :
public class JLayeredPaneExemple extends JFrame {
public JLayeredPaneExemple() {
super ("Test JLayeredPane") ;
setSize (300, 200);
setDefaultCloseOperation (3) ;
JLayeredPane 1p = getLayeredPane() ;
Button b3 = new JButton ("3");
[Link] (Color .white) ;
[Link] (60, 100, 60, 60);
gButton b2 = new JButton ("2");
b2. setBackground (Color yellow) ;
[Link] (40, 60, 60, 60);
Button bl = new JButton("1");
bl. setBackground ([Link]) ;
[Link](20, 20, 60, 60);
// Place les boutons dans les différentes couches
[Link](b1, new Integer (1);
[Link](b2, new Integer (2))
[Link](b3, new Integer (3));
,
,
© Compilez puis exécutez ce programme
Professeur Lahoucine BALLIHIFaculté des Sciences de Rabat Interface Homme Machine
Université Mohammed V de Rabat ‘Année Universitaire 2019/2020
ye Département Informatique SMI-S6
Application — Galerie d'images
On souhaite faire une application java qui va lister verticalement la vignette ainsi les
propriétés d'un ensemble d'images, qui se trouve dans un dossier donné, comme
illustré par interface suivante.
[)Prooieme-comenew-hnemédisie = - OD x
Nome a pnows:16
taetsRies
Pour faire cette application, tous d’abord, vous représentez les propriétés de chaque
image sous forme d'une table html, vous pouvez donc déclarer tabHtml comme
attribut de la classe de type String initialisé comme suit ;
tabtml = "
" + "| {0} |
" +
“| {1} x {2} |
"+ "| {3} octets |
" +
"| {4, date, full} |
" + "
";
Puis, vous formatez les propriétés de chaque image sous forme d'une chaine de
caractére :
description = [Link](tabHtml, [Link](),
largeur hauteur, [Link]() , fichier. 1lastModified());
Ensuite, pour récupérer la vignette de chaque image en utilisant |a fonction suivante :
private Icon vignette(File fichier) throws IOException {
BufferedImage source = [Link] (fichier) ;
largeur = [Link]() ;
hauteur = [Link] () ;
BufferedImage image = new BufferedImage (200, 150,
[Link]()) ;
double ratio = 200 / (double) largeur;
AffineTransform retailler =
[Link] (ratio, ratio) ;
int interpolation = AffineTransformop.TYPE_BICUBIC;
AffineTransformOp retaillerImage = new
AffineTransfornOp(retailler, interpolation) ;
[Link](source, image) ;
return new ImageIcon (image) ;
y
Enfin, vous rassemblez la description et la vignette dans une étiquette :
JLabel etiquette = new JLabel(description, icone, [Link]);
Professeur Lahoucine BALLIHI