Les principaux contrôles de Swing

Les principaux contrôles de Swing

Cases à cocher

Nous placerons les trois cases dans un panneau associé à la fenêtre. Nous faisons de la fenêtre l’écouteur des boutons et des cases. Comme l’impose l’énoncé, nous redéfinissons à la fois les méthodes actionPerformed et itemStateChanged. import javax.swing.* ; import java.awt.* ; import java.awt.event.* ; class MaFenetre extends JFrame implements ActionListener, ItemListener { public MaFenetre () { setTitle (« Cases a cocher ») ; setSize (300, 140) ; Container contenu = getContentPane () ; // les deux boutons boutRaz = new JButton (« RAZ ») ; boutRaz.addActionListener (this) ; contenu.add (boutRaz, « North ») ; boutEtat = new JButton (« Etat ») ; boutEtat.addActionListener (this) ; contenu.add (boutEtat, « South ») ; // les cases a cocher dans un panneau pan = new JPanel () ; contenu.add (pan) ; cercle = new JCheckBox (« Cercle ») ; pan.add (cercle) ; Écrire un programme qui affiche deux boutons marqués RAZ et Etat et trois cases à cocher, de la façon suivante : L’action sur le bouton Etat provoquera l’affichage en fenêtre console des cases sélectionnées. L’action sur RAZ remettra les trois cases à l’état non coché. Enfin, on signalera en fenêtre console les événements de type Action et Item associés à chacune des trois cases (en précisant la source concernée).Nous placerons les trois cases dans un panneau associé à la fenêtre. Nous faisons de la fenêtre l’écouteur des boutons et des cases. Comme l’impose l’énoncé, nous redéfinissons à la fois les méthodes actionPerformed et itemStateChanged. import javax.swing.* ; import java.awt.* ; import java.awt.event.* ; class MaFenetre extends JFrame implements ActionListener, ItemListener { public MaFenetre () { setTitle (« Cases a cocher ») ; setSize (300, 140) ; Container contenu = getContentPane () ; // les deux boutons boutRaz = new JButton (« RAZ ») ; boutRaz.addActionListener (this) ; contenu.add (boutRaz, « North ») ; boutEtat = new JButton (« Etat ») ; boutEtat.addActionListener (this) ; contenu.add (boutEtat, « South ») ; // les cases a cocher dans un panneau pan = new JPanel () ; contenu.add (pan) ; cercle = new JCheckBox (« Cercle ») ; pan.add (cercle) ; Écrire un programme qui affiche deux boutons marqués RAZ et Etat et trois cases à cocher, de la façon suivante : L’action sur le bouton Etat provoquera l’affichage en fenêtre console des cases sélectionnées. L’action sur RAZ remettra les trois cases à l’état non coché. Enfin, on signalera en fenêtre console les événements de type Action et Item associés à chacune des trois cases (en précisant la source concernée).  Exercice 112 Cases à cocher cercle.addActionListener (this) ; cercle.addItemListener (this) ; rectangle = new JCheckBox (« Rectangle ») ; pan.add (rectangle) ; rectangle.addActionListener (this) ; rectangle.addItemListener (this) ; triangle = new JCheckBox (« Triangle ») ; pan.add (triangle) ; triangle.addActionListener (this) ; triangle.addItemListener (this) ; } public void actionPerformed (ActionEvent e) { Object source = e.getSource() ; if (source == boutRaz) { cercle.setSelected (false) ; rectangle.setSelected (false) ; triangle.setSelected (false) ; } if (source == boutEtat) { System.out.print (« Cases selectionnees : « ) ; if (cercle.isSelected()) System.out.print ( » cercle « ) ; if (rectangle.isSelected()) System.out.print ( » rectangle « ) ; if (triangle.isSelected()) System.out.print ( » triangle « ) ; System.out.println() ; } if (source == cercle) System.out.println (« Action case cercle ») ; if (source == rectangle) System.out.println (« Action case rectangle ») ; if (source == triangle) System.out.println (« Action case triangle ») ; } public void itemStateChanged (ItemEvent e) { Object source = e.getSource() ; if (source == cercle) System.out.println (« Item case cercle ») ; if (source == rectangle) System.out.println (« Item case rectangle ») ; if (source == triangle) System.out.println (« Item case triangle ») ; } private JButton boutRaz, boutEtat ; private JPanel pan ; private JCheckBox cercle, rectangle, triangle ; } public class Coches { public static void main (String args[]) { MaFenetre fen = new MaFenetre() ; fen.setVisible(true) ; } } Item case cercle Action case cercle geneli~1. Les principaux contrôles de Swing Chapitre 10 176 © Éditions Eyrolles Item case rectangle Action case rectangle Cases selectionnees : cercle rectangle Item case cercle Item case rectangle Item case triangle Item case cercle Action case cercle Item case rectangle Action case rectangle Cases selectionnees : cercle rectangle On notera qu’à chaque événement Action relatif à une case à cocher correspond toujours un événement Item. La réciproque est fausse puisqu’un événement Item peut être généré suite à une modification par programme de l’état d’une case ; dans ce cas, elle ne génère pas d’événement Action. Plusieurs instructions semblables doivent être écrites pour chaque case à cocher. Si le nombre de cases devenait important, cela pourrait s’avérer fastidieux. Il serait alors préférable de s’acheminer vers une solution plus concise telle que l’écriture de méthodes (statiques) d’intérêt général, par exemple pour l’ajout d’une case de référence donnée à la fenêtre. On pourrait aussi conserver dans la fenêtre un tableau des références des cases ainsi qu’un tableau de chaînes correspondant à leurs libellés…

LIRE AUSSI :  Cours gratuit Introduction au langage C

Champs de texte

Ici, nous pouvons nous permettre d’introduire directement dans la fenêtre les différents contrôles dont nous avons besoin. Nous remplaçons simplement le gestionnaire par défaut par un gestionnaire de type FlowLayout. Nous utilisons des objets de type JLabel pour les libellés, ainsi que pour la valeur du carré. La saisie du nombre se fait dans un objet nommé nombre de type JTextField. Écrire un programme qui permet à l’utilisateur de saisir un nombre entier dans un champ texte et qui en affiche le carré lorsqu’il agit sur un bouton marqué CALCUL : Le programme devra gérer convenablement le cas où l’utilisateur entre autre chose qu’un nombre dans le champ texte ; il pourra par exemple remettre ce champ à blanc. 115 geneli~1.book Page 180 Lundi, 10. juillet 2006 12:46 12 © Éditions Eyrolles 181 Exercice 115 Champs de texte Ici, nous n’avons pas à nous préoccuper des événements générés par nombre puisque le calcul proprement dit est déclenché par une action extérieure à l’objet. En revanche, nous devons traiter les événements de type Action déclenchés par le bouton. Nous y récupérons le contenu du champ texte que nous convertissons en entier avec la méthode Integer.parseInt. Celle-ci déclenche une exception NumberFormatException lorsque la chaîne ne correspond pas à un nombre entier (y compris lorsqu’elle contient trop de chiffres). Dans le gestionnaire d’exception correspondant, nous nous contentons de remettre à blanc le contenu du champ texte. Ici, nous calculons le carré du nombre dans le type long, ce qui évite tout problème de dépassement de capacité. import java.awt.* ; import java.awt.event.* ; import javax.swing.* ; class MaFenetre extends JFrame implements ActionListener { public MaFenetre () { setTitle (« Carres ») ; setSize (400, 100) ; Container contenu = getContentPane() ; contenu.setLayout (new FlowLayout() ) ; labNombre = new JLabel (etiqNombre) ; contenu.add(labNombre) ; nombre = new JTextField (10) ; contenu.add(nombre) ; boutonCalcul = new JButton (« CALCUL ») ; contenu.add(boutonCalcul) ; boutonCalcul.addActionListener(this) ; labCarre = new JLabel (etiqCarre) ; contenu.add(labCarre) ; } public void actionPerformed (ActionEvent e) { if (e.getSource() == boutonCalcul) try { String texte = nombre.getText() ; int n = Integer.parseInt(texte) ; long carre = (long)n*(long)n ; labCarre.setText (etiqCarre + carre) ; } catch (NumberFormatException ex) { nombre.setText («  ») ; labCarre.setText (etiqCarre) ; } } private JLabel labNombre, labCarre ; private JTextField nombre ; static private String etiqNombre = « Nombre : « , etiqCarre = « Carre :  » ; private JButton boutonCalcul ; }

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *