LOG2710   LOG2710, Analyse et conception d'interfaces utilisateurs
Automne 2006
format impression
 

Évaluation formative

Quiz volet développement

  1. Indiquez parmi les choix suivants lesquels représentent des entités pouvant générer des événements :
    1. Le système d'exploitation
    2. Le système de fenêtrage
    3. Des instruction du programme lui-même
  2. Pour chacune des situations suivantes, déterminez si le serveur graphique, le gestionnaire de fenêtres, ou si les deux interviennent.  Expliquez brièvement votre réponse. 
    1. Le tracage d'un cercle dans une fenêtre par l'application
    2. L'iconisation des fenêtres du "desktop" par une action de l'utilisateur
    3. La transmission d'un interruption matérielle (interrupt) comme un événement à l'application
    4. Le changement de "focus" lorsque la souris passe d'une fenêtre à l'autre (sans cliquer)
  3. Pratiquement la totalité des systèmes de fenêtrage modernes nécessitent que les fenêtres définissent une fonction de redessinage (redraw) ou (repaint)).  Toutefois, il existe une alternative à cette approche.  Quelle est-elle?
  4. Vrai ou faux? Expliquez au besoin. 
    • Avec X, le mécanisme des ressources permet de changer le nom des boutons lors de l'invoquation, sans avoir à recompiler l'application
    • Swing permet de développer des applications multi-plateformes par l'adoption de l'architecture client-serveur
    • La fonction d'aiguillage (dispatching) d'événement est associée au controlleur dans le modèle MVC
    • Par rapport au modèle MVC, le client dans l'architecture client-serveur de X représente le "view", tandis que le serveur représente le "controller"
    • X-Windows utilise une architecture client-serveur programmable
    • La technique de fonction de rappel (callback) permet d'implanter dynamiquement la communication entre objets
    • Une application peut garder le contrôle de la souris et du clavier même si celle-ci sort du rectangle de la fenêtre
    • Le gestionnaire de fenêtre contrôle le comportement du "focus" (entrées du clavier)
    • Un des avantages principaux de l'architecture client-serveur est la portabilité entre systèmes d'exploitation
    • Avec Java Swing, le filtrage des événements se fait par le mécanisme de surcharge des méthodes
    • Le mécanisme de "signals and slots" de Qt permet de remplacer celui des fonctions de rappel de différentes boîtes à outils. 
  5. Commentez le code suivant :
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class ComboBoxDemo extends JPanel
                              implements ActionListener {
        JLabel picture;
    
        public ComboBoxDemo() {
            super(new BorderLayout());
    
            String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
    
    
            // ****************
            // ****************
    
            JComboBox petList = new JComboBox(petStrings);
            petList.setSelectedIndex(4);
            petList.addActionListener(this);
            //Set up the picture. 
            picture = new JLabel();
            picture.setFont(picture.getFont().deriveFont(Font.ITALIC));
            picture.setHorizontalAlignment(JLabel.CENTER);
            updateLabel(petStrings[petList.getSelectedIndex()]);
            picture.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
    
            //The preferred size is hard-coded to be the width of the
            //widest image and the height of the tallest image + the border. 
            //A real program would compute this. 
            picture.setPreferredSize(new Dimension(177, 122+10));
    
            //Lay out the demo. 
            add(petList, BorderLayout.PAGE_START);
            add(picture, BorderLayout.PAGE_END);
            setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
        }
    
    
        // ****************
        // ****************
    
        public void actionPerformed(ActionEvent e) {
            JComboBox cb = (JComboBox)e.getSource();
            String petName = (String)cb.getSelectedItem();
            updateLabel(petName);
        }
    
        protected void updateLabel(String name) {
            ImageIcon icon = createImageIcon("images/" + name + ".gif");
            picture.setIcon(icon);
            picture.setToolTipText("A drawing of a " + name.toLowerCase());
            if (icon != null) {
                picture.setText(null);
            } else {
                picture.setText("Image not found");
            }
        }
    
        /** Returns an ImageIcon, or null if the path was invalid.   */
        protected static ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = ComboBoxDemo.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
        }
    
    
        // ****************
        // ****************
        // ****************
    
        private static void createAndShowGUI() {
    
            // ****************
    
            JFrame.setDefaultLookAndFeelDecorated(true);
    
    
            // ****************
    
            JFrame frame = new JFrame("ComboBoxDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    
            // ****************
    
            JComponent newContentPane = new ComboBoxDemo();
            newContentPane.setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane);
    
    
            // ****************
    
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
    
            // ****************
            // ****************
            // ****************
    
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }