Jean-Rémi LECQ Version 0.3

47
Jean-Rémi LECQ Jean-Rémi LECQ Version 0.3 Version 0.3 Développement Développement d’interfaces d’interfaces graphiques en graphiques en Java à l’aide de Java à l’aide de SWING SWING

description

Jean-Rémi LECQ Version 0.3. Développement d’interfaces graphiques en Java à l’aide de SWING. Sommaire. Introduction Rappel sur les JFC AWT Swing Première Application (TD1) Fenêtres, panneaux Fenêtres : JFrame, JDialog, JWindow Panneaux : JRootPane, J Panel, JMenuBar PremierJMenu (TD2) - PowerPoint PPT Presentation

Transcript of Jean-Rémi LECQ Version 0.3

Page 1: Jean-Rémi LECQ Version 0.3

Jean-Rémi LECQJean-Rémi LECQVersion 0.3Version 0.3

Développement Développement d’interfaces d’interfaces

graphiques en Java graphiques en Java à l’aide de à l’aide de

SWINGSWING

Page 2: Jean-Rémi LECQ Version 0.3

SommaireSommaire IntroductionIntroduction

Rappel sur les JFCRappel sur les JFC AWTAWT SwingSwing

Première Application (TD1)Première Application (TD1) Fenêtres, panneauxFenêtres, panneaux

Fenêtres : JFrame, JDialog, JWindowFenêtres : JFrame, JDialog, JWindow Panneaux : JRootPane, J Panel, JMenuBarPanneaux : JRootPane, J Panel, JMenuBar

PremierJMenu (TD2) PremierJMenu (TD2) Les évènementsLes évènements PremierJMenu (TD2 – suite) + SecondJMenu PremierJMenu (TD2 – suite) + SecondJMenu

+FocusEvent+FocusEvent

Page 3: Jean-Rémi LECQ Version 0.3

Rappel sur les JFCRappel sur les JFC

JFC = Java Foundation Classes.JFC = Java Foundation Classes.

Ensemble de librairies Java permettant la Ensemble de librairies Java permettant la constructions d’applications graphiques constructions d’applications graphiques (GUI et graphiques) sous n’importe quel (GUI et graphiques) sous n’importe quel OS.OS.

Les 5 parties majeures des JFC :Les 5 parties majeures des JFC :AWT – SWING – Accessibility - AWT – SWING – Accessibility - Java2D - InternationalizationJava2D - Internationalization

Page 4: Jean-Rémi LECQ Version 0.3

Native Windows Look and Feelsupported on Microsoft Windows only

                                                                                                         

Native Mac Look and Feel "Aqua"implemented by Apple and supported on Mac only

                                                                                                         

Java Look and Feel "Metal"supported on all platforms

                                                                                                         

Motif Look and Feel (Solaris & Linux)supported on all platforms

                                                                                                         

Page 5: Jean-Rémi LECQ Version 0.3

1- Contexte1- ContexteD’abord…D’abord…

AWTAWT : Abstract Windowing Toolkit. : Abstract Windowing Toolkit.

Première librairie fournie par SUN pour Première librairie fournie par SUN pour le développement d’interfaces le développement d’interfaces graphiques.graphiques.

Eléments graphiques auront l’apparence Eléments graphiques auront l’apparence que l’OS leur donne (utilisation que l’OS leur donne (utilisation ressources systèmes via abstractions) !ressources systèmes via abstractions) !

Page 6: Jean-Rémi LECQ Version 0.3

1- Contexte1- ContexteEnsuite …Ensuite …

SWINGSWING : utilise des éléments d’AWT. : utilise des éléments d’AWT.

SWING peut être considérée comme une SWING peut être considérée comme une évolution d’AWT.évolution d’AWT.

Eléments graphiques dessinés par la Eléments graphiques dessinés par la librairie elle-même ! Composant graphique librairie elle-même ! Composant graphique peut ne pas avoir d’équivalent système.peut ne pas avoir d’équivalent système.

Donc -> Portabilité accrue.Donc -> Portabilité accrue.

SWING ne remplace pas AWT, c’est juste SWING ne remplace pas AWT, c’est juste un couche au dessus. un couche au dessus.

Page 7: Jean-Rémi LECQ Version 0.3

2- TD n°1 Première 2- TD n°1 Première application SWINGapplication SWING

Ordre des tâches à effectuer ;Ordre des tâches à effectuer ;

1.1. Ecriture du code de la classe,Ecriture du code de la classe,

2.2. Compilation (javac.exe) et debugage (?),Compilation (javac.exe) et debugage (?),

3.3. Création du Manifest,Création du Manifest,

4.4. Création de l’archive auto exécutable Création de l’archive auto exécutable (jar.exe),(jar.exe),

5.5. Exécution de notre archive auto Exécution de notre archive auto exécutable (java.exe)exécutable (java.exe)

Page 8: Jean-Rémi LECQ Version 0.3

2.1- Ecriture du code de 2.1- Ecriture du code de la classela classeimportimport javax.swing.*; javax.swing.*;

publicpublic classclass PremiereApp { PremiereApp {privateprivate staticstatic String texte = "Hello World!"; String texte = "Hello World!";

publicpublic staticstatic voidvoid main(String[ ] args) main(String[ ] args){{

JFrame maFenetre = JFrame maFenetre = newnew JFrame( JFrame("ma première fenêtre "ma première fenêtre

SWING");SWING");maFenetre.setSize(250,80);maFenetre.setSize(250,80);JLabel monLabel = JLabel monLabel = newnew JLabel(texte, JLabel(texte,

SwingConstants.LEFT);SwingConstants.LEFT);maFenetre.getContentPane().add(monLabel);maFenetre.getContentPane().add(monLabel);maFenetre.show();maFenetre.show();maFenetre.setDefaultCloseOperation(maFenetre.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);JFrame.EXIT_ON_CLOSE);}}

}}

Page 9: Jean-Rémi LECQ Version 0.3

2.2- Compilation 2.2- Compilation (javac.exe) et debugage(javac.exe) et debugage

Sous Eclipse ou autre Framework -> Sous Eclipse ou autre Framework -> automatique.automatique.

En ligne de commande -> En ligne de commande -> positionnez vous dans le répertoire positionnez vous dans le répertoire qui contient votre classe java, puis :qui contient votre classe java, puis :

"/"/pathtojavac.exepathtojavac.exe/javac" /javac" MaClass.javaMaClass.java

Page 10: Jean-Rémi LECQ Version 0.3

2.3 - Création du 2.3 - Création du ManifestManifest

Manifest -> Qu'est ce que c'est ?Manifest -> Qu'est ce que c'est ?

C'est un fichier qui spécifie la classe C'est un fichier qui spécifie la classe "exécutable"."exécutable".Celle qui contient la méthode ???Celle qui contient la méthode ???

public static void main (String[ ] args){public static void main (String[ ] args){

……

}}

Page 11: Jean-Rémi LECQ Version 0.3

2.3 - Création du 2.3 - Création du ManifestManifest

Créez un fichier Créez un fichier Manifest.mfManifest.mf..

Contenu :Contenu :

Main-Class: MaClassMain-Class: MaClass

Attention :Attention :- Pas d'espace entre "Main-Class" et ":",- Pas d'espace entre "Main-Class" et ":",- un espace entre ":" et "MaClass",- un espace entre ":" et "MaClass",- (au moins) un retour à la ligne à la fin de - (au moins) un retour à la ligne à la fin de cette ligne !cette ligne !

Page 12: Jean-Rémi LECQ Version 0.3

2.4 - Création de 2.4 - Création de l’archive auto exécutable l’archive auto exécutable

(jar.exe)(jar.exe)Sous Eclipse ou autre Framework -> automatique.Sous Eclipse ou autre Framework -> automatique.

En ligne de commande -> positionnez vous dans le répertoire En ligne de commande -> positionnez vous dans le répertoire qui contient votre classe java, puis :qui contient votre classe java, puis :

"/"/pathtojarexepathtojarexe/jar" -cmf Manifest.mf NomduJar.jar /jar" -cmf Manifest.mf NomduJar.jar MaClass1.class MaClass2.classMaClass1.class MaClass2.class

Pour notre exemple :Pour notre exemple :

"/"/pathtojar.exepathtojar.exe/jar" -cmf Manifest.mf PremiereApp.jar /jar" -cmf Manifest.mf PremiereApp.jar PremiereApp.classPremiereApp.class

Sur moka :Sur moka : U:/ U:/pathtojar.exepathtojar.exe/> "C:\Program Files\java\/> "C:\Program Files\java\j2sdk1.4.1_02\bin\jar" j2sdk1.4.1_02\bin\jar"  -cmf manifest.mf PremiereApp.jar PremiereApp.class -cmf manifest.mf PremiereApp.jar PremiereApp.class

Page 13: Jean-Rémi LECQ Version 0.3

2.5- Exécution de notre 2.5- Exécution de notre archive auto exécutable archive auto exécutable

(java.exe)(java.exe)En mode "fenêtre" : double clic sur l'archive En mode "fenêtre" : double clic sur l'archive

auto exécutable "MonArchive.jar".auto exécutable "MonArchive.jar".

En mode console :En mode console :

"/"/pathtojava.exepathtojava.exe/java" -jar /java" -jar MonArchive.jar MonArchive.jar

Page 14: Jean-Rémi LECQ Version 0.3

2.6- Listing du contenu 2.6- Listing du contenu d'un jard'un jar

En mode console :En mode console :

jar –tvf MonArchive.jar jar –tvf MonArchive.jar

Page 15: Jean-Rémi LECQ Version 0.3

3 – Fenêtres, panneaux et 3 – Fenêtres, panneaux et borduresbordures

3.1- FENETRES3.1- FENETRES

En SWING :En SWING :

JFrame,JFrame, JDialog (fenêtres secondaires JDialog (fenêtres secondaires

modales),modales), JWindow (Splash screen).JWindow (Splash screen).

Page 16: Jean-Rémi LECQ Version 0.3

JFrame

JRootPane

glassPane layeredPane ( JLayeredPane) (1 Jpannel par défaut)

contentPane menuBar (1 JPannel par défaut) (Null JmenuBar par défaut)

3.1.1- JFrame - 3.1.1- JFrame - ArchitectureArchitecture

Page 17: Jean-Rémi LECQ Version 0.3

3.1.1- JFrame - 3.1.1- JFrame - ArchitectureArchitecture

glassPane

menuBar

layeredPane

contentPane

Page 18: Jean-Rémi LECQ Version 0.3

3.2 – Les panneaux3.2 – Les panneauxConteneursConteneurs

JRootPane.JRootPane. glassPane (attrape événements).glassPane (attrape événements). layeredPane (conteneur de fenêtres filles),layeredPane (conteneur de fenêtres filles),

contentPane (JPanel par défaut).contentPane (JPanel par défaut). menuBar (null par défaut).menuBar (null par défaut).

JPanel : JPanel : conteneur de composant(s), leur conteneur de composant(s), leur organisation dépend d'un "layour manager".organisation dépend d'un "layour manager".

JMenuBar : JMenuBar : "null", sinon unique par JFrame."null", sinon unique par JFrame.

JLayeredPanel : JLayeredPanel : construction de fenêtres fille construction de fenêtres fille (MDI)(MDI)

Page 19: Jean-Rémi LECQ Version 0.3

3- TD n°2 Premier JMenu3- TD n°2 Premier JMenu

Créer la fenêtre suivante (l'affichage seulement, Créer la fenêtre suivante (l'affichage seulement, les évènements seront ajoutés après).les évènements seront ajoutés après).

Page 20: Jean-Rémi LECQ Version 0.3

3.2.5- La gestion des 3.2.5- La gestion des évènementsévènements

Evènement : action de l'utilisateur (en règle Evènement : action de l'utilisateur (en règle générale), clic sur un bouton; sélection, simple générale), clic sur un bouton; sélection, simple déplacement souris.déplacement souris.

Exemples de classes d’évènements :Exemples de classes d’évènements :FocusEvent : FocusEvent : Passage du focus à un Passage du focus à un

composantcomposantMouseEvent : MouseEvent : Clic sur un JPanelClic sur un JPanelActionEvent :ActionEvent : Clic sur un JButtonClic sur un JButtonDocumentEvent : DocumentEvent : Ajout d’une lettre à un Ajout d’une lettre à un

JTextFieldJTextField

Objet évènement Objet évènement contient des informations sur contient des informations sur son contexte d'apparition(coordonnée, source, son contexte d'apparition(coordonnée, source, valeur d'une touche).valeur d'une touche).

Page 21: Jean-Rémi LECQ Version 0.3

3.2.5- La gestion des 3.2.5- La gestion des évènementsévènements

Classe java.util.EventObject :Classe java.util.EventObject :Superclasse de tous les évènements.Superclasse de tous les évènements.

Exemple de classe d'évènements :Exemple de classe d'évènements :ActionEvent ActionEvent -> clic sur un composant,-> clic sur un composant,ComponentEventComponentEvent -> modification d'un -> modification d'un

composantcomposantContainerEvent ContainerEvent  -> composant ajouté à un -> composant ajouté à un

conteneurconteneurFocusEventFocusEventKeyEvent KeyEvent MouseEvent  MouseEvent 

Page 22: Jean-Rémi LECQ Version 0.3

3.2.5- La gestion des 3.2.5- La gestion des évènementsévènements

Listener : Listener : objet java à l'écoute d'un objet java à l'écoute d'un évènement sur un composant déterminé.évènement sur un composant déterminé.-info sur lui-même,-info sur lui-même,-sur l'objet à son origine (source).-sur l'objet à son origine (source).

Notification

Abonnement

Bouton Listener

addActionListener, addActionListener, addKeyListener, addKeyListener,

addFocusListeneraddFocusListener

Page 23: Jean-Rémi LECQ Version 0.3

3.2.5- La gestion des 3.2.5- La gestion des évènementsévènements

ListenerListener = classe qui implémente une des = classe qui implémente une des interfaces de java.awt.Event (à importer).interfaces de java.awt.Event (à importer).

Méthodes à redéfinir (cf. cours)Méthodes à redéfinir (cf. cours)

ExempleExemple : :public classpublic class PremierMenu PremierMenu extendsextends JFrame JFrame

implementsimplements ActionListener { ActionListener {public voidpublic void actionPerformed(ActionEvent e) { actionPerformed(ActionEvent e) {

……}}

}}

Page 24: Jean-Rémi LECQ Version 0.3

TD n°2 Premier JMenu TD n°2 Premier JMenu (suite)(suite) Ajout des évènementsAjout des évènements

TD Second MenuTD Second Menu

TD FocusEventTD FocusEvent

Page 25: Jean-Rémi LECQ Version 0.3

Construction d'une classe implémentant Construction d'une classe implémentant l'interface "listener " gérant les focus.l'interface "listener " gérant les focus. Redéfinir les méthodes nécessaires.Redéfinir les méthodes nécessaires. Créer un constructeur qui initalise deux Créer un constructeur qui initalise deux

couleurs.couleurs. Construction d'une classe étendant JFrame.Construction d'une classe étendant JFrame.

Celle-ci doit contenir 3 javax.swing.JButtonCelle-ci doit contenir 3 javax.swing.JButton JFrame.getContentPane(Object, JFrame.getContentPane(Object,

BorderLayout.North)BorderLayout.North) Color JFrame.setBackground() / getBackground()Color JFrame.setBackground() / getBackground() java.awt.Color -> Color.GREENjava.awt.Color -> Color.GREEN

TD FocusEventTD FocusEventaideaide

Page 26: Jean-Rémi LECQ Version 0.3

But :But : Coder la JFrame suivante : Coder la JFrame suivante : Comportement : Comportement : A chaque pressionA chaque pression

d'une touche, le caractère correspondantd'une touche, le caractère correspondantest ajouter à la barre de titre.est ajouter à la barre de titre.

AttentionAttention : :bien différencier "getKeyChar()"bien différencier "getKeyChar()"et getKeyCode()et getKeyCode()

TD KeyEventTD KeyEvent

Page 27: Jean-Rémi LECQ Version 0.3

Définir une classe étendant JFrame avec Définir une classe étendant JFrame avec un simple JLabel dont vous déterminer un simple JLabel dont vous déterminer une bordure de votre choix (utilisez la une bordure de votre choix (utilisez la méthode setBorder()) de la façon la plus méthode setBorder()) de la façon la plus "rapide" possible (cf. cours)."rapide" possible (cf. cours).

Définir une classe étendant le Listener de Définir une classe étendant le Listener de votre choix, dans laquelle vous définirez la votre choix, dans laquelle vous définirez la construction d'une barre de menus et les construction d'une barre de menus et les évènements associés aux clic sur chacun évènements associés aux clic sur chacun de ses MenuItemsde ses MenuItems

TD KeyEventTD KeyEventaideaide

Page 28: Jean-Rémi LECQ Version 0.3

3.3- Les bordures3.3- Les bordures Bordures SWING prédéfinies :Bordures SWING prédéfinies :

BevelBorder : Bordure 3D (élevée / abaissée)BevelBorder : Bordure 3D (élevée / abaissée) TitledBorder : Bordure avec titre. TitledBorder : Bordure avec titre. EtchedBorder : Bordure à l’apparence gravée.EtchedBorder : Bordure à l’apparence gravée. CompoundBorder : Combinaison de bordures CompoundBorder : Combinaison de bordures

interne et externe.interne et externe. EmptyBorder : Bordure transparente EmptyBorder : Bordure transparente

délimitant des espaces vides.délimitant des espaces vides. LineBorder : Bordure aplatie.LineBorder : Bordure aplatie. MatteBorder : Bordure pleine (couleur) ou en MatteBorder : Bordure pleine (couleur) ou en

mosaïque (images).mosaïque (images). SoftBevelBorder : Bordure 3D avec côtés SoftBevelBorder : Bordure 3D avec côtés

arrondis.arrondis.

BorderFactoryBorderFactory

Page 29: Jean-Rémi LECQ Version 0.3

3.3- Les bordures3.3- Les bordures TD3 PremiereBordureTD3 PremiereBordure

Page 30: Jean-Rémi LECQ Version 0.3

3.3- Les bordures3.3- Les bordures Possibilité de développer ses propres éléments Possibilité de développer ses propres éléments

graphiques dont les bordures font partie !graphiques dont les bordures font partie !

Une façon de faire :Une façon de faire : Commencez par définir la classe implémentant Border. Commencez par définir la classe implémentant Border.

Attention, 3 methodes à redéfinir :Attention, 3 methodes à redéfinir : public Insets getBorderInsets(Component c) { }public Insets getBorderInsets(Component c) { } public boolean isBorderOpaque() { return true; }public boolean isBorderOpaque() { return true; } public void paintBorder(Component c, Graphics g, int x, int y, int w, public void paintBorder(Component c, Graphics g, int x, int y, int w,

int h) { } : méthode qui affiche la bordure avec la taille et la position int h) { } : méthode qui affiche la bordure avec la taille et la position spécifiées. Utiliser les méthodes adéquates de g (ex: setColor(), spécifiées. Utiliser les méthodes adéquates de g (ex: setColor(), drawLine(), drawArc()).drawLine(), drawArc()).

Ensuite définissez une JFrame. Appliquer votre bordure par Ensuite définissez une JFrame. Appliquer votre bordure par l'intermédiaire d'un objet de CompoundBorder:l'intermédiaire d'un objet de CompoundBorder:

CompoundBorder Mabord = new CompoundBorder(new CompoundBorder Mabord = new CompoundBorder(new EmptyBorder(10,10,10,10), new BordurePerso EmptyBorder(10,10,10,10), new BordurePerso (10,10,Color.X,Color.Y));(10,10,Color.X,Color.Y));

Page 31: Jean-Rémi LECQ Version 0.3

3.3- Les bordures3.3- Les bordures TD3 BordurePersonnaliseeTD3 BordurePersonnalisee

Page 32: Jean-Rémi LECQ Version 0.3

4 – Libellés et boutons4 – Libellés et boutons

4.1 - JLabel4.1 - JLabel Label contenant du texte : alignement à gaucheLabel contenant du texte : alignement à gauche Label contenant une image : alignement au Label contenant une image : alignement au

centrecentre Possibilité de spécifier son alignement Possibilité de spécifier son alignement

personnel :personnel : setVertical[Text]Alignement(int alignement)setVertical[Text]Alignement(int alignement) setHorizontal[Text]Alignement(int alignement)setHorizontal[Text]Alignement(int alignement) - SwingConstants.LEFT- SwingConstants.LEFT - SwingConstants.CENTER- SwingConstants.CENTER - SwingConstants.RIGHT- SwingConstants.RIGHT - SwingConstants.TOP- SwingConstants.TOP - SwingConstants.BOTTOM- SwingConstants.BOTTOM

Page 33: Jean-Rémi LECQ Version 0.3

4 – Libellés et boutons4 – Libellés et boutons4.2 - Bouton4.2 - Bouton

classeclasse javax.swing.AbstractButton javax.swing.AbstractButton boutons poussoirs(boutons poussoirs(JButtonJButton),), boutons bascule (boutons bascule (JToggleButtonJToggleButton), ), cases à cocher (cases à cocher (JCheckBoxJCheckBox), ), boutons radio (boutons radio (JRadioButtonJRadioButton),), mais aussi les élements de menu mais aussi les élements de menu

((JMenuItemJMenuItem) et les menus eux-mêmes ) et les menus eux-mêmes ((JMenuJMenu))

Page 34: Jean-Rémi LECQ Version 0.3

4.2 - Bouton4.2 - Bouton

4.2.1 - boutons poussoirs(4.2.1 - boutons poussoirs(JButtonJButton) :) :

Texte, image (Texte, image (neutre, survol, clicneutre, survol, clic), ), raccourci vers le bouton raccourci vers le bouton (setMnemomic(char)-> Alt+"char")(setMnemomic(char)-> Alt+"char")

JRootPane.setDefaultbutton(Button) JRootPane.setDefaultbutton(Button) -> focus-> focus

Page 35: Jean-Rémi LECQ Version 0.3

4.2 - Bouton4.2 - Bouton

4.2.2 - boutons bascule 4.2.2 - boutons bascule ((JToggleButtonJToggleButton):):

javax.swing.JToggleButtonjavax.swing.JToggleButton

JCheckBox et JRadioButton -> JCheckBox et JRadioButton -> principe d'exclusion mutuelle.principe d'exclusion mutuelle.

ButtonGroup.add( Button )ButtonGroup.add( Button )

Page 36: Jean-Rémi LECQ Version 0.3

TD 4 - Boutons Bascules TD 4 - Boutons Bascules et ActionListeners et ActionListeners

1 JButton1 JButton 3 JToggleButton3 JToggleButton 1 ButtonGroup1 ButtonGroup 1 JLabel1 JLabel 1JPanel les contenant tous (FlowLayout par 1JPanel les contenant tous (FlowLayout par

défaut)défaut)

Page 37: Jean-Rémi LECQ Version 0.3

4 – Layouts4 – Layouts Définition :Définition :

Lorsqu'un "container" contient plusieurs Lorsqu'un "container" contient plusieurs composants, un layout est implémenté afin de composants, un layout est implémenté afin de gérer correctement le positionnement de chacun gérer correctement le positionnement de chacun d'eux.d'eux.

Composant.size() != Composant.preferredSize()Composant.size() != Composant.preferredSize()

Liste :Liste : FlowLayoutFlowLayout GridLayoutGridLayout BoxLayoutBoxLayout BorderLayoutBorderLayout

Page 38: Jean-Rémi LECQ Version 0.3

4 – Layouts4 – Layouts

5.1.1 classe java.awt.FlowLayout5.1.1 classe java.awt.FlowLayout Les composants sont placés :Les composants sont placés :

les uns à côté des autres de gauche à droiteles uns à côté des autres de gauche à droite sur une seule ligne tant que c'est possiblesur une seule ligne tant que c'est possible ajout de ligne si nécessaireajout de ligne si nécessaire impossible de connaître la ligne du composant impossible de connaître la ligne du composant

à l'avanceà l'avance Layout par défaut des JPanel (sauf le Layout par défaut des JPanel (sauf le

JRootPane -> BorderLayout)JRootPane -> BorderLayout) FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.LEFT, FlowLayout.RIGHT,

FlowLayout.CENTERFlowLayout.CENTER

Page 39: Jean-Rémi LECQ Version 0.3

4 – Layouts4 – Layouts5.1.2 classe java.awt.GridLayout5.1.2 classe java.awt.GridLayoutimport java.awt.*;import java.awt.*;import java.applet.Applet;import java.applet.Applet;public class ButtonGrid extends Applet {public class ButtonGrid extends Applet {

public void init() {public void init() {setLayout(new GridLayout(3,2));setLayout(new GridLayout(3,2));add(new Button("1"));add(new Button("1"));add(new Button("2"));add(new Button("2"));add(new Button("3"));add(new Button("3"));add(new Button("4"));add(new Button("4"));add(new Button("5"));add(new Button("5"));add(new Button("6"));add(new Button("6"));

}}} } Applique la Applique la .preferredSize().preferredSize() -> réajustement non -> réajustement non

souhaité ?souhaité ?

Page 40: Jean-Rémi LECQ Version 0.3

4 – Layouts4 – Layouts

5.1.3 java.swing.BoxLayout5.1.3 java.swing.BoxLayout

C'est un FlowLayout qui peut être soit C'est un FlowLayout qui peut être soit horizontal soit vertical, en fonction des horizontal soit vertical, en fonction des paramètres donnés au constructeur :paramètres donnés au constructeur :

BBoxLayoutoxLayout((ContainerContainer target, int axis) target, int axis) Composant affichés selon leur Composant affichés selon leur

"preferredSize" et ne sont pas "preferredSize" et ne sont pas redimensionnés !redimensionnés !

Page 41: Jean-Rémi LECQ Version 0.3

4 – Layouts4 – Layouts5.1.3 java.swing.BoxLayout5.1.3 java.swing.BoxLayout java.swing.Boxjava.swing.Box

Structures solides : espace fixe entre 2 Structures solides : espace fixe entre 2 composantscomposants

Box. Box. createHorizontalStrutcreateHorizontalStrut(int width)(int width) Box. Box. createVerticalStrutcreateVerticalStrut(int height)(int height)

Glues : composants qui occupe le + d'espace Glues : composants qui occupe le + d'espace possible horizontalement ou verticalement.possible horizontalement ou verticalement.

Box. Box. createHorizontalGluecreateHorizontalGlue()() Box. Box. createVerticalGluecreateVerticalGlue()()

Zones rigides : composant invisible de taille Zones rigides : composant invisible de taille fixefixe

Box. Box. createRigidAreacreateRigidArea((DimensionDimension d)  d)

Page 42: Jean-Rémi LECQ Version 0.3

4 – Layouts4 – Layouts5.1.4 java.swing.BorderLayout5.1.4 java.swing.BorderLayout

Stratégie de positionnement en 5 Stratégie de positionnement en 5 cases :cases : Zone centrale Zone centrale -> max H et max V-> max H et max V Z. Nord et Sud Z. Nord et Sud -> max H et min V-> max H et min V Z. Est et OuestZ. Est et Ouest -> min H et max V-> min H et max VNORD (NORTH)

SUD (SOUTH)

OUEST

(WEST)

EST(EAST

)

CENTRE (CENTER)

Page 43: Jean-Rémi LECQ Version 0.3

TD 5 - TD5 Layouts les TD 5 - TD5 Layouts les plus courantsplus courants

Page 44: Jean-Rémi LECQ Version 0.3

6 – Combo Box6 – Combo Box6.1 java.swing.JComboBox6.1 java.swing.JComboBox

JComboBox = JList + boutonJComboBox = JList + bouton

6.1.1 6.1.1 TD6 ComboBox pour choix de films (cf. TD6 ComboBox pour choix de films (cf. cours)cours)

Page 45: Jean-Rémi LECQ Version 0.3

6 – Combo Box6 – Combo Box6.1.2.1 Les Renderers6.1.2.1 Les Renderers Objet simple permettant de dessiner des Objet simple permettant de dessiner des

composants complexes composants complexes Exemple : ComboBox (chaque ligne = 1 Exemple : ComboBox (chaque ligne = 1

JLabel)JLabel)

Combo Box Comment dois je dessiner la

ligne ?( envoi de l’objet )

Objet Renderer

Renvoie le composant graphique

entièrement paramétré

JLabel

Page 46: Jean-Rémi LECQ Version 0.3

6 – Combo Box6 – Combo Box

6.1.2.1 Les Renderers6.1.2.1 Les Renderers

6.1.2 6.1.2 TD6 ComboBox personnalisée TD6 ComboBox personnalisée (cf. cours)(cf. cours)

Interface

ListCellRenderer

Interface

TableCellRenderer

Interface

TreeCellRenderer

DefaultListCellRenderer

DefaultTableCellRenderer

DefaultTreeCellRenderer

Page 47: Jean-Rémi LECQ Version 0.3

7 - JList7 - JList

7.1 Sélection7.1 Sélection