Ceci est une ancienne révision du document !
Swing
TD n°7
TODO
Partie 1
Gestion des événements sur la fenêtre :
Sur fermeture de la fenêtre, ou l'ouverture d'un Dessin, si le dessin en cours a été modifié (dirty=true dans MainController), la boîte de message suivante doit-être affichée :
Boîtes de message :
Ecouteurs sur fenêtre :
- WindowAdapter
- WindowListener
Partie 2
Ajout de l'outil Épaisseur de trait
- 1 - Boîte de dialogue :
- Eléments :
- contentPane → [new BorderLayout(0, 0)]
- zoneDeSaisie → North JPanel [new FlowLayout(FlowLayout.CENTER, 10, 10)]
- JLabel + JSlider → setMinorTickSpacing, setMajorTickSpacing, setPaintTicks, setPaintLabels, setFont(new Font(“Segoe UI”, Font.PLAIN, 11))
- bandeDeBoutons → South JPanel[new FlowLayout(FlowLayout.RIGHT, 10, 10)]
TD6
TODO
Partie 1
Pour la partie 1, travailler en binômes : 1 étudiant utilise les actionListeners, 1 autre le propertyChangeListener.
Les expériences sont ensuite partagées.
Dans chaque binôme :Les expériences sont ensuite partagées.
- 1 étudiant implémente les actions suivantes en utilisant des ActionListener dans la vue FenetreDeDessin dans le projet TD6-ACTL
- changement d'outil sur menu (Etoile ou crayon)
- Fermeture de l'application
- Effacement du dessin
- 1 autre implémente ces 3 mêmes actions en utilisant PropertyChangeListener au niveau du contrôleur dans le projet TD6-PCL
- Comparer ensuite les 2 versions (avantages/inconvénients)
Partie 2
- Implémenter les actions des éléments de menu Ouvrir, Enregistrer et Enregistrer sous :
- observer et comprendre la mise en oeuvre de la sérialisation proposée (Interface, classe DAO, classes métier)
- utiliser l'instance dessinDao du contrôleur pour l'ouverture et la sauvegarde, et la propriété dirty (drapeau pour désigner la modification)
- utiliser JFileChooser pour les boîtes de dialogue (voir FileDialogEx.java) voir JFileChooser javadoc
- Gérer les exceptions
Partie 3
- Créer une boîte de dialogue A propos de… et ajouter un élément de menu correspondant dans un menu ?/A propos de… voir JDialog
- Proposer des solutions pour qu'une seule instance de DialogAbout soit créée pendant l'exécution de l'application
- Créer un sous menu Couleur dans Outil, proposant de changer la couleur de l'outil (noir, bleu, rouge, vert, jaune), modifier le modèle pour prendre en compte la couleur des figures.
Boîte de dialogue A propos de… :
Ressources
- Charger une image contenue dans les sources java :
String imagePathAndFileName="CheminRelatifVersImage"; java.net.URL imageURL = getClass().getResource(imagePathAndFileName); img = new ImageIcon(imageURL).getImage();
- Dessiner sur un JPanel :
JPanel panel = new JPanel() {
@Override
public void paint(Graphics g) {
//dessin sur g...
}
};
- L'interface PropertyChangeListener
- l'EDT Swing : Event Dispatching Thread
TD5
TODO
- Terminer l'implémentation Dessin Swing avec 2 outils + Contrôleur principal
- Ajouter le changement d'outil sur frappe touche du clavier (e → Etoile , c → Crayon ) voir addKeyListener
- Ajouter le changement d'outil dans un menu Outil composé de 2 JRadioButtonMenuItem, intégrés dans un ButtonGroup :
Menu Outil :
TD4
Composants
JFrame
java 7 JFrame API
Paramètres de base
- setTitle(String)
- setSize(int, int)
- setDefaultCloseOperation(int)
- setLocationRelativeTo(Component)
- setJMenuBar(JMenu)
- setLayout(LayoutManager)
- add(Component, Object)
- setVisible(Boolean)
Ajout de listeners :
- addMouseListener(MouseListener l)
- addMouseMotionListener(MouseMotionListener l)
- addKeyListener(KeyListener l)
JMenuBar
- add(JMenu)
JMenu
- add(JMenuItem)
- addSeparator()
JMenuItem
- addActionListener(ActionListener)
LayoutManager
BorderLayout
parent.setLayout(new BorderLayout()); parent.add(component, BorderLayout.CENTER);
GridLayout
parent.setLayout(new GridLayout(1, 3)); parent.add(component);


