Swing et les Interfaces Graphiques 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 1 Plan Introduction Le Package Swing (Liste exhaustive) Utilisation des Composants Les Événements Les Interfaces Graphiques Les différents langages Les Apparences « LookAndFeel » Exemple d’application Swing 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 2 Introduction Les Packages de JDK Le Package javax Le Sous Package javax.swing 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 3 Les Packages Standard de JDK 1.4 audio COM & com fonts images java java2d Javax launcher 1er novembre 2004 models netscape org sounds sun sunw templates Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 4 Le Package javax Le Package javax fut inclus dans JDK à partir de la version 1.2 (Java 2) Dans ce package, nous trouvons différents sous packages: accessibility crypto imageio naming net print rmi security sound sql swing transaction xml 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 5 Le Package Swing javax.swing Composants Basiques Composants Textes Menus, Bar d’outils et ToolTips Containers javax.swing.beaninfo javax.swing.beaninfo.images javax.swing.border javax.swing.colorchooser javax.swing.event 1er novembre 2004 javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.plaf.multi javax.swing.table javax.swing.text javax.swing.text.html javax.swing.tree javax.swing.undo Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 6 Les Composants Swing Composants Basiques JApplet JButton JCheckBox JRadioButton JToggleButton JComboBox JList JSlider JTable JTree JProgessBar JSpinner 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 7 Les Composants Swing Menus, Bar d’outils et ToolTips JMenuBar JMenu JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem JPopupMenu JToolBar JToolTip 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 8 Les Composants Swing Composants Textes JPasswordField JTextField JTextArea JTextPane JEditorPane 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 9 Les Composants Texte JTextComponent Légende Texte Simple Ligne Texte Multi Ligne JTextField JTextArea JEditorPane Texte Ordinaire JPasswordField JTextPane Texte Stylisé 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 10 Les Composants Swing Containers JOptionPane JDialog JTabbedPane JSplitPane JScrollPane JFrame JInternalFrame JDesktopPane JWindow 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 11 Layout et les containers Pour positionner un composant, nous avons plusieurs positions prédéfinis. Ces positions qui sont proposés par Java sont: BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout GridLayout 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 12 Les Caractéristiques d’un JComponent La plupart des composants Swing descendent de JComponent qui hérite de Container Caractéristiques d’un JComponent Bordure Méthode setBorder(titledBorder1) pour spécifier une bordure autour du composant. Avec titledBorder1 = new TitledBorder( BorderFactory.createEtchedBorder( Color.white,new Color( 156, 156, 158 ) ),"Radio Group"); Double-buffering 2 mémoires d’affichages existent : celle que l’on voit et celle où les composants Swing sont en train d’être dessinés. Évite le clignotement du tracé. setDoubleBuffered(false) permet de l’enlever Tool tips setToolTipText spécifie l’affichage d’un message d’aide lorsque le curseur est sur un objet Navigation au clavier registerKeyboardAction autorise l’usage du clavier en plus de la souris pour manoeuvrer 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 13 Les Caractéristiques d’un JComponent Propriétés putProperty associe une propriété au composant Style chaque composant a un pluggable LookAndFeel permettant au UIManager.setLookAndFeel global de fonctionner Placement contrôlé par setPreferredSize, setMinimumSize, setMaximumSize, setAlignmentX, et setAlignmentY Accessibilité pour les technologies d’assistance Localisation permet des comportements différents en fonction du pays, de la langue, etc. 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 14 Utilisation des Composants Swing JFrame JPanel (ContentPane) JButton JButton JPanel JTextField JScrollPane JList 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 15 Déclaration des Composants public class Cadre extends JFrame { JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JTree jTree1 = new JTree(); JTextField jTextField1 = new JTextField(); JPanel contentPane; JPanel jPanel1 = new JPanel(); JScrollPane jScrollPane1 = new JScrollPane(); BorderLayout borderLayout1 = new BorderLayout(); 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 16 Initialisation des Composants private void Initialization() throws Exception { this.setSize(new Dimension(400, 300)); this.setTitle("Titre du cadre"); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); jButton1.setBounds(new Rectangle(23, 60, 102, 32)); jButton1.setText("jButton1"); jButton2.setBounds(new Rectangle(23, 104, 102, 32)); jButton2.setText("jButton2"); jPanel1.setBorder(BorderFactory.createEtchedBorder()); jPanel1.setBounds(new Rectangle(141, 35, 234, 215)); jPanel1.setLayout(borderLayout1); jTextField1.setText("jTextField1"); 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 17 Initialisation des Composants contentPane.add(jButton1, null); contentPane.add(jButton2, null); contentPane.add(jPanel1, null); jPanel1.add(jScrollPane1, BorderLayout.CENTER); jPanel1.add(jTextField1, BorderLayout.NORTH); jScrollPane1.getViewport().add(jTree1, null); } 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 18 Les Événements Nous allons voir comment nous pouvons ajouter un événement à un bouton afin d’effectuer la fonction souhaitée lorsque l’on clique dessus. Nous allons donc voir un exemple pour créer un menu et affecter au bouton quitter du menu fichier l’action nécessaire pour terminer le processus. Pour avoir un menu et avoir un bouton quitter, nous ajoutons alors les éléments suivants à la classe JFrame : La barre de Menu de l’application JMenuBar jMenuBar1 = new JMenuBar(); Le Menu Fichier JMenu jMenuFile = new JMenu(); Le bouton Quitter JMenuItem jMenuQuitter = new JMenuItem(); 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 19 Les Événements Dans la méthode d’initialisation de la classe, nous ajoutons ce qui suit pour: Ajouter la barre de menu à l’application this.setJMenuBar(jMenuBar1); Ajouter le Menu Fichier à la barre de menu jMenuFile.setText("Fichier"); jMenuBar1.add(jMenuFile); Ajouter le bouton au menu fichier et de son listener jMenuQuitter.setText("Quitter"); jMenuQuitter.addActionListener(new Cadre1_jMenuQuitter_actionAdapter(this)); jMenuFile.add(jMenuQuitter); Méthode associée au bouton Quitter public void jMenuFileExit_actionPerformed(ActionEvent e) { System.exit(0); } 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 20 Les Événements A présent, nous devons ajouter un événement à notre bouton nous avons besoin de définir une classe particulière qui fera appel à la méthode que nous aurons choisi. Dans notre exemple cette méthode s’appelle jMenuFileExit_actionPerformed(actionEvent) qui est déclarée dans notre classe JFrame. class Cadre1_jMenuQuitter_actionAdapter implements java.awt.event.ActionListener { Cadre1 adaptee; Cadre1_jMenuQuitter_actionAdapter(Cadre1 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jMenuFileExit_actionPerformed(e); } } 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 21 Les Interfaces graphiques Il faut savoir que différents langages peuvent nous permettre de créer des interfaces graphiques. Nous pouvons avoir le C++, le Pascal avec Delphi mais encore Java que nous voyons depuis le début de cet exposé. La différence entre Java et les autres langages de programmation, est que nous pouvons lancer une application Java, qui a été au préalable compilée sur une plateforme quelconque, sur n’importe quelle machine à partir du moment où cette machine possède une machine virtuelle (ou JVM pour Java Virtual Machine). Pour plus de faciliter afin de créer ce genre d’application, il est conseillé d’utiliser un éditeur de code Java comme JBuilder que nous préférerons mais payant en version complète ou encore Eclipse qui lui est gratuit mais moins convivial. 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 22 Les Apparences LookAndFeel Grâce à java, nous avons la possibilité de choisir l’apparence. Pour changer l’aspect de l’application, il suffit de mettre ce qui suit dans la méthode main. Pour choisir l’apparence de la plateforme où la machine virtuelle est lancée UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); Pour choisir l’apparence Motif UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); Pour choisir l’apparence Metal UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); Pour choisir l’apparence Windows UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 23 Les Apparences « LookAndFeel » Windows 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 24 Les Apparences « LookAndFeel » Métal (Par Défaut) 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 25 Les Apparences « LookAndFeel » Motif 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 26 Bibliographie Informations sur le Net (Google) Programmer en Java - Claude Delannoy Ed. Eyrolles Aide Borland JBuilder 1er novembre 2004 Swing et Interfaces Graphiques Demoulin Yann - DESS RSI 27