1 / 65

Java : Graphique Swing

Java : Graphique Swing. Les API. import java.awt.*;. awt ancien leger base des applets AWT (Abstract Window Toolkit, JDK 1.1). swing beaucoup plus complet Swing (JDK/SDK 1.2) construit sur AWT. import javax.swing.*;. Les principes. Container - contient des widgets ou des containers

Download Presentation

Java : Graphique Swing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java : Graphique Swing Brigitte Groléas

  2. Les API import java.awt.*; • awt • ancien • leger • base des applets • AWT (Abstract Window Toolkit, JDK 1.1) • swing • beaucoup plus complet • Swing (JDK/SDK 1.2) • construit sur AWT import javax.swing.*; Brigitte Groléas

  3. Les principes • Container - contient des widgets ou des containers • Windows, JFrame, JPanel ... • Disposeur ( Layout ) • Comment disposer les widgets à l'intérieur du contener • un disposeur par container • Widget • éléments graphiques à poser dans le container Brigitte Groléas

  4. Canevas class Ihm extends JFrame { public Ihm() { super( "suis un essai"); FlowLayout dispo = new FlowLayout (); fenetre.setLayout( dispo ); JLabel l = new JLabel( "titi"); fenetre.add(l); JTextField t = new JTextField(20); fenetre.add(t); fenetre.pack(); fenetre.setVisible(true); } } Brigitte Groléas

  5. Hiérarchie des classes Brigitte Groléas

  6. Les Conteneurs (1) • JFrame : remplace la Frame (BorderLayout disposeur par défaut) • JPanel : classe destinée à contenir d'autres classes • JScrollPane : Permet de visualiser un objet trop grand. Au lieu d'écrire directement dans un JPanel  JScrollPane scrollPane = new JScrollPane(textArea); Brigitte Groléas

  7. Les Conteneurs(2) • JTabbedPane :Mettre plusieurs JPanel dans des onglets • JSplitPane :Permet d'affichier deux JPanels séparés verticalement ou horizontalement JTabbedPane tabbedPane = new JTabbedPane(); ImageIcon icon =new ImageIcon("onglet/connexion.png"); JPanel panelOnglet1 = new JPanel (); tabbedPane.addTab("Client", icon, panelOnglet1, "Does nothing"); JSplitPane pp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel1, panel2); Brigitte Groléas

  8. Component : propriétés et fonctions • couleur de fond : void setBackground(color)/ color getBackground • couleur : void setForeground(color)/ color getForeground • curseur :void setCursor (Cursor)/ Cursor getCursor() • police : void setFont(Font) / Font getFont () • localisation • nom ..... ..... • Taille • Visibilité : void setVisible() Brigitte Groléas

  9. Disposer les objets Layout Manager : interface pour positionner les objets à l’intérieur d’un container Tout container doit avoir un disposeur Java pose un disposeur par défaut sur chaque contenair Brigitte Groléas

  10. NORTH trois un WEST CENTER deux EAST SOUTH quatre cinq Les conteneurs 1 FlowLayout f = new FlowLayout (); fen.setLayout(f); BorderLayout b = new BorderLayout(); fen.setLayout(b); JButton BB = new JButton(« ok »); fen.add(truc, BorderLayout.NORTH); ... Brigitte Groléas

  11. un deux trois quatre six cinq Les conteneurs 2 Gridlayout g newGridLayout(3,2); fen.setLayout(g); ... JPanel cardPanel = new JPanel(), ... , LargePanel = new Panel(); CardLayout card = new CardLayout(); cardPanel.setLayout(card); ... LargePanel.setLayout (new BorderLayout()); lrg = new ... LargePanel.add (lrg,BorderLayout.CENTER); cardPanel.add("lrg", LargePanel); Brigitte Groléas

  12. nom : Des conteneurs dans des conteneurs • JFrame f = new JFrame(); • JPanel p = new JPanel(); • p.add(new JLabel("Nom :"); • p.add( new JTextField(20); • f.add(p); Brigitte Groléas

  13. à vous ... coucou 1 Coucou 2 coucou5 coucou 7 Coucou 3 coucou 8 coucou 9 Coucou 4 coucou 10 coucou 6 Brigitte Groléas

  14. Boite de dialiogue • JOptionPane.showMessageDialog(null, "Bonjour, monde"); JLabel component = new JLabel( "Erreur de saisie !" ); JOptionPane.showMessageDialog( null , // frame parent component , // objet graphique a afficher "Message d'erreur" , // barre de titre JOptionPane.ERROR_MESSAGE ); Brigitte Groléas

  15. Saisie dans une boite de dialogue • import javax.swing.JOptionPane; • String rep; • rep= JOptionPane.showInputDialog(null, "nom ?"); System.out.println( rep); Dans le corps de la classe Brigitte Groléas

  16. Quelques widgets JLabel JTextField JComboBox JButton JList JCheckBox Brigitte Groléas

  17. JLabel et JButton JLabel(String, int) où int = JLabel.LEFT, JLabel.RIGHT, JLabel.CENTER • getText() • setText() • getAlignement() • setHorizontalAlignment(JLabel.LEFT) • Un Label a un fond transparent par défaut • setOpaque(true) pour rendre sensible à la couleur de fond JLabel l = new JLabel("nom : ", JLabel.LEFT); • JButton( String ) ou JButton(Icon ) • getLabel() • setLabel( String ) • isEnabled() • setEnabled(false) JButton bOk = new JButton("Valider"); Brigitte Groléas

  18. JLabel avec image • Mélanger un texte et une icône sur un label • Permet la superposition ImageIcon i = new ImageIcon("nomPackage/Pig.gif"); JLabel spiderPig = new JLabel( "Tiens, un cochon !" , i , JLabel.CENTER ); Brigitte Groléas

  19. Zone de saisie JTextField() , JTextField( String, int) • setEchoChar( char ) pour une saisie aveugle • setText( String ) • setEditable(boolean) • getText() JTextField t = new JTextField("Nom ? ", 20); • JTextArea(),JTextArea( nbLig, nbCol ),JTextArea( String ) • getColumns(), getRows() • insert(String, int ) où int est la position du texte inséré • append(String) JTextArea t = new JTextArea(); Brigitte Groléas

  20. Case à cocher sans lien • JCheckBox c1 = new JCheckBox("homme" , true); • JCheckBox c2 = new JCheckBox("femme" , false); • JCheckBox c3 = new JCheckBox("enfant" , false); • .setSelectedIcon(NomIcone) • .setIcon(NomIcone) isSelected() : retourne true si la Checkbox est sélectionnée setSelected(true) : pour que la case soit cochée Brigitte Groléas

  21. Exclusion mutuelle ButtonGroup identite = new ButtonGroup(); JRadioButton homme = new JRadioButton( "Homme" ); homme.setSelected( true ); JRadioButton femme = new JRadioButton( "Femme" ); identite.add( homme ); identite.add( femme ); Le ButtonGroup n'est pas une widget, ni un contener, il ne s'ajoute pas au contener. Pas de add Brigitte Groléas

  22. Liste • JComboBox  • Liste non déroulante • Jlist • Liste déroulante avec sélection multiple possible String[] items = {"item1", "item2"}; JComboBox aa = new JComboBox(items); String[] items = {"A", "B", "C", "D"}; JList list = new JList(items); Object[] items2 = {new Integer(123), new java.util.Date()}; list = new JList(items2); Brigitte Groléas

  23. Méthodes des listes • addItem(Object) • setEditable(true) • setSelectedItem(« Paris ») • setMaximumRowCount(5) getSelectedIndex(), retourne l’index de ll’item sélectionné Brigitte Groléas

  24. À vous … Dessinez cet écran Brigitte Groléas

  25. Misc ... • JSlider : valeur numérique comprise entre 2 bornes. • JProgressBar : barre de progression • JToolTip : Bulle d'aide • JLabel l = new Jlabel("nom"); • l.setToolTipText("Entrez un patronyme"); JSlider slider = new JSlider(minimum, maximum, initValue); slider.setMajorTickSpacing(100); slider.setMinorTickSpacing(10); slider. setPaintTicks(true); slider.setPaintLabels(true); Brigitte Groléas

  26. JMenu JMenu un = new JMenu("Un"); JMenuItem unSousUn = new JMenuItem("UnsousUn"); un.add(unSousUn); JMenuItem deuxSousUn = new JMenuItem("DeuxSousUn"); un.add(deuxSousUn); JMenuItem troisSousUn = new JMenuItem("TroisSousUn"); un.add(troisSousUn); JMenu deux = new JMenu("Deux"); JMenuItem unSousDeux = new JMenuItem("unSousDeux"); deux.add(unSousDeux); JMenuBar mb = new JMenuBar(); mb.add(un); mb.add(deux); setJMenuBar(mb); Brigitte Groléas

  27. JMenu JMenu un = new JMenu("Un"); JMenuItem unSousUn = new JMenuItem("UnsousUn"); un.add(unSousUn); JMenu deux = new JMenu("Deux"); JMenuItem unSousDeux = new JMenuItem("unSousDeux"); deux.add(unSousDeux); JMenuItem deuxSousDeux = new JMenuItem("DeuxSousDeux"); deux.add(deuxSousDeux); un.add(deux); JMenuItem troisSousUn = new JMenuItem("TroisSousUn"); un.add(troisSousUn); JMenuBar mb = new JMenuBar(); mb.add(un); setJMenuBar(mb); Brigitte Groléas

  28. À vous … Créer le menu Awt swing bouton Jbouton liste Jlist unique ComboBox sélections multiples case à cocher exclusion sélections multiples Brigitte Groléas

  29. Les fontes • Font maFont = new Font (« serif », Font.BOLD | Font.ITALIC, 32); xxx.setFont( maFont ) • Icon monIcone = new ImageIcon(«chat.gif ») • Xxx.setIcon( monIcone) Brigitte Groléas

  30. Les couleurs • 13 constantes prédéfinies (Color.RED, Color.Blue ...) • Couleurs personnalisées Color coul = new Color(int rouge, int vert, int bleu ); 0 <= r,v,b <= 255 • Méthodes associées • setForeground( Color ) • setBackGround( Color ); • La classe java.awt.SystemColor permet de récupérer les couleurs de l ’environnement « bureau » via les constantes : Brigitte Groléas

  31. JColorChooser • Dialogue permettant de choisir une couleur Color c = JColorChooser.showDialog((JFrame) fenetre, "Choix de la couleur de fond", couleur); Brigitte Groléas

  32. L'événementiel • Boucle d'attente d'événements système asynchrones. • Le gestionnaire d'événements appelle les méthodes appropriées appartenant aux objets ayant déclaré répondre à ces événements. • En programmation événementielle, les méthodes de réponses aux événements systèmes sont appelées routines de callback. Brigitte Groléas

  33. Modèle de délégation Dans le modèle de programmation événementielle en Java on favorise la délégation : On crée des liens entre -   des contrôles qui gèrent des événements et -   des méthodes personnelles (des écouteurs) qui répondent de façon appropriée aux contrôleurs qui ont besoin de leurs services. La délégation n'est pas la seule façon de faire de la programmation événementielle. Elle permet cependant un partage des rôles clair entre producteurs d'événements (les contrôles) et consommateurs d'événements (les écouteurs). Brigitte Groléas

  34. Ecouter • Poser un objet Listener sur l'objet que l'on veut rendre réactif • Un Listener doit implémenter une interface • XXListener où XX est le nom de l'événement • Exemple : ActionListener, WindowListener, MouseListener Brigitte Groléas

  35. Les interfaces disponibles • ActionListener click sur bouton ... • AdjustmentListener changement d’un curseur ... • FocusListener focalisation • ItemListener case à cocher, liste ... • KeyListener touche clavier • MouseListener click souris ... • MouseMotionListener déplacement souris ... • WindowListener actions fenêtre ... • ComponentListener masquer un composant ... • ContainerListener ajouter un composant ... • TextListener modif de texte ... Brigitte Groléas

  36. Les écouteurs d'événements public class Essai extends JPanel{ public Essai() { JButton button = new JButton("Clic ici"); button.addActionListener(newEcouteBouton()); add(button); } } classEcouteBouton implementsActionListener { public voidactionPerformed(ActionEvent event) { System.out.println("tu as cliqué"); } } Brigitte Groléas

  37. ActionEvent L'utilisateur veut déclencher une action, Clic de bouton JButton : Action Event activé sur click JList : Action Event Activé sur sélection (double click) JTextField : Action Event Activé sur ENTER ActionListener Brigitte Groléas

  38. Sélection d'items Changement de l'état de sélection public class Essai extends Panel{ Choice c; public Essai() { c = new Choice(); c.add("Rouge") .... c.addItemListener(newEcouteListe()); } class EcouteListe implements ItemListener { public voiditemStateChanged(ActionEvent event) { System.out.println(c.getSelectedItem()); } } } Brigitte Groléas

  39. Sélection d'items du menu JMenuItem menu = new JMenuItem("Pascal"); menu.addActionListener(new LanguageMenuListener()); public class LanguageMenuListener implements ActionListener { public void actionPerformed(ActionEvent evt) { System.out.println("Menu: " + evt.getActionCommand()); } } Brigitte Groléas

  40. À vous … Dans le menu créé à l’exemple précédent • Faire afficher au milieu de l’écran les widjets sélectionnées dans le menu awt ( et uniquement elles). • Lors de la sélection d’un des menus du sous menu swing, afficher ‘inconnu pour l’instant’ Brigitte Groléas

  41. Changement d'un texte textField.addTextListener(newDebugTextListener()); textArea.addTextListener(newDebugTextListener()); } } classDebugTextListenerimplementsTextListener { public voidtextValueChanged(TextEvent event) { Object obj = event.getSource(); System.out.println(obj.toString()); } } Brigitte Groléas

  42. Implementation parinterface JButton bOk = new JButton("Press Me"); bOk.addMouseListener(new ButtonMouseListener()); class ButtonMouseListener implements MouseListener { public void mouseEntered(MouseEvent event) { System.out.println("Mouse Entered Button"); } public void mouseExited(MouseEvent event) { System.out.println("Mouse Exited Button"); } public void mousePressed (MouseEvent event) { } public void mouseClicked (MouseEvent event) { } public void mouseReleased(MouseEvent event) { }} Brigitte Groléas

  43. Listener vs adaptater • Les listeners sont des interfaces, il est indispensable d'implémenter toutes les méthodes définies. Et elles sont parfois nombreuses • fastidieux • long • Les adaptateurs sont des classes contenant des méthodes de corps vides à surcharger si besoin. • L'utilisation d'adaptateur est souvent plus simple à implémenter. Brigitte Groléas

  44. Fermeture de la fenêtre addWindowListener(new MyWindowListener()); public class MyWindowListenerextends WindowAdapter { public void windowClosing(WindowEvent evt) { System.out.println("Fermeture"); System.exit(0); } } Brigitte Groléas

  45. Adapter : implémente les méthodes JButton button = new JButton("Valider"); button.addMouseListener(new ButtonMouseListener()); classButtonMouseListenerextendsMouseAdapter { public void mouseEntered(MouseEvent event) { System.out.println("Bouton enfoncé"); } public void mouseExited(MouseEvent event) { System.out.println("Bouton laché");} } Brigitte Groléas

  46. Comment accéder aux composants public class Essai extends JPanel{ JTextField saisie; public Essai() { saisie = new JTextField(); add(saisie); JButton button = new JButton("Clic ici"); EcouteBouton ec = newEcouteBouton(this); button.addActionListener(ec ) ; add(button); } } class EcouteBouton implements ActionListener { ... } Brigitte Groléas

  47. Lien "Has-a" public class Essai extends JPanel{ JTextField saisie; public Essai() { saisie = ... JButton button = ... button.addActionListener(newEcouteBouton(this)); } } class EcouteBouton implements ActionListener { Essai essai; EcouteBouton (Essai essai) { this.essai = essai; } public voidactionPerformed(ActionEvent event) { System.out.println(essai.saisie.getText()); } } Brigitte Groléas

  48. Inner classe public class Essai extends JPanel{ private JTextField saisie; public Essai() { saisie = ... JButton button = ... button.addActionListener(newEcouteBouton()); } class EcouteBouton implements ActionListener { public voidactionPerformed(ActionEvent event) { System.out.println(saisie.getText()); } } } Brigitte Groléas

  49. Classe anonyme JButton bOk = new JButton( "Valider" ); bOK.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) { System.out.println( "Cliqué !" ); } } ); fenetre.add( bOk ); Brigitte Groléas

  50. à vous … Exercice ce synthèse • Les listes déroulantes permettent de modifier la couleur du fond/texte de ‘coucou’ • Les cases à cocher ‘Forme’ permettent de modifier l’alignement de ‘coucou’ • Les boutons Majuscules et Minuscules servent à modifier la casse • Nouveau Texte, permet de remplacer le texte ‘coucou’ • Effacer efface le texte ‘coucou ‘ • Détails permet de saisir un nouvel élément dans la liste sélection Brigitte Groléas

More Related