Java : Applet avec objets AWT
TextArea et TextField

Objectif : Nous utilisons dans l'applet un objet de classe Awt TextField, un objet de classe Awt TextArea, un objet de classe Awt Button, deux objets Checkbox. Notre applet doit rajouter dans le TextArea l'élément entré par le clavier dans le TextField (le click sur le Button déclenchant la recopie). Nous voulons enfin, que les Checkbox servent à rendre le bouton de copie visible ou invisble afin d'autoriser ou d'interdire la copie.
 

Travail à exécuter en Java

On vous donne le squelette général de l'applet en vous indiquant que le  Button doit posséder un écouteur sur l'événement actionPerformed (sensible au click de souris), chaque Checkbox doit posséder un écouteur sur l'événement itemStateChanged (la case a changé d'état cochée/décochée). Les deux Checkbox seront associé à un même objet de groupe (classe Awt CheckboxGroup) afin de s'exclure mutuellement.

Le texte contenu dans le TextField doit être sélectionné au départ et à chaque fois que l'applet est redessinée. Le focus doit être mis sur le TextField  dès que le bouton de copie a été cliqué ceci afin que l'utilisateur revienne automatiquement taper son texte dans le TextField.

Squelette de l'applet à compléter :

Démarrage
état de l'applet au départ code java correspondant
this.setLayout(null);
textArea1.setBounds(13, 16, 177, 115);
textField1.setText("entrez le texte à copier");
textField1.setBounds(10, 152, 243, 23);
button1.setLabel("copier");
button1.setBounds(59, 197, 178, 32);    checkbox1.setCheckboxGroup(checkboxGroup1);
checkbox1.setLabel("copie activée");
checkbox1.setState(true);
checkbox1.setBounds(197, 31, 103, 25);
 checkbox2.setCheckboxGroup(checkboxGroup1);
checkbox2.setLabel("copie desactivée");
checkbox2.setBounds(198, 72, 115, 16);
this.add(button1);
this.add(textArea1);
this.add(textField1);
this.add(checkbox2);
this.add(checkbox1);

 

Click sur Button "copier"
état de l'applet après un click sur le bouton
une fois qu'un texte a été entré dans le TextField
code java correspondant
au click sur le bouton : ajout au TextArea du texte entré dans le TextField

On ajoute le texte entré à la suite du texte déjà présent dans le TextArea :
textArea1.append( textField1.getText( )+"\n" );

On redonne la focalisation (pour les entrées clavier) au TextField :
textField1.requestFocus( );

Après un redissenement de l'applet
état de l'applet après que soit sa taille ait été modifiée, soit l'applet ait été masqué etc... code java
Après chaque redessinement de l'applet

- on surligne (sélectionne) le texte du TextField :
textField1.setSelectionStart(0);
textField1.setSelectionEnd(textField1.getText().length());

- on donne la focalisation au TextField : 
 textField1.requestFocus();

Click sur une des cases à cocher
état de l'applet après un click sur la case "copie désactivée" (le bouton devient invisible) code java
On teste les informations contenues dans l'objet "e" de classe ItemEvent afin de connaître le genre de changement d'état qui vient de se produire sur la case à cocher.

pour la case à cocher "copie activée" :
 if ( e.getStateChange( ) == ItemEvent.SELECTED )
            button1.setVisible(true);

pour la case à cocher "copie désactivée" :
 if ( e.getStateChange( ) == ItemEvent.SELECTED )
            button1.setVisible(false);

pour mettre les cases dans le même groupe :
checkbox1.setCheckboxGroup(checkboxGroup1);
checkbox2.setCheckboxGroup(checkboxGroup1);

pour la sélection du texte dans le TextField :
textField1.setSelectionStart(0);
textField1.setSelectionEnd( textField1.getText( ).length( ) );

 

Construisez en recombinant les lignes de code proposées un programme complet d'applet correct.
 

Remonter 



 

2 - Proposition de solution Java :

Le code java de l'applet :
 

 import java.awt.*;
 import java.awt.event.*;
 import java.applet.*;

   public class Applet_TextFieldArea extends Applet {
      TextArea textArea1 = new TextArea();
      TextField textField1 = new TextField();
      Button button1 = new Button();
      CheckboxGroup checkboxGroup1 = new CheckboxGroup();
      Checkbox checkbox2 = new Checkbox();
      Checkbox checkbox1 = new Checkbox();

      public void init() {
         this.setLayout(null);
         textArea1.setBounds(13, 16, 177, 115);
         textField1.setText("entrez le texte à copier");
         textField1.setBounds(10, 152, 243, 23);
         button1.setLabel("copier");
         button1.setBounds(59, 197, 178, 32);
         button1.addActionListener(
           new java.awt.event.ActionListener() {
              public void actionPerformed(ActionEvent e) {
                     button1_actionPerformed(e);
                  }
               });
         checkbox2.setCheckboxGroup(checkboxGroup1);
         checkbox2.setLabel("copie desactivée");
         checkbox2.setBounds(198, 72, 115, 16);
         checkbox2.addItemListener(
           new java.awt.event.ItemListener() {
              public void itemStateChanged(ItemEvent e) {
                     checkbox2_itemStateChanged(e);
                  }
               });
         checkbox1.setCheckboxGroup(checkboxGroup1);
         checkbox1.setLabel("copie activée");
         checkbox1.setState(true);
         checkbox1.setBounds(197, 31, 103, 25);
         checkbox1.addItemListener(
           new java.awt.event.ItemListener() {
              public void itemStateChanged(ItemEvent e) {
                     checkbox1_itemStateChanged(e);
                  }
               });
         this.add(button1);
         this.add(textArea1);
         this.add(textField1);
         this.add(checkbox2);
         this.add(checkbox1);
      }
      public void paint(Graphics x){
    /* à chaque redessinement le texte du textField1 est sélectionné 
       et le textField1 possède la focalisation
    */
         textField1.requestFocus();
         textField1.setSelectionStart(0);
         textField1.setSelectionEnd(textField1.getText().length());

      }
      void button1_actionPerformed(ActionEvent e) {
    /*après le click sur le bouton le textField1 possède
    la focalisation */
         textArea1.append(textField1.getText()+"\n");
         textField1.requestFocus();
      }

      void checkbox1_itemStateChanged(ItemEvent e) {
      // lorsque cette case est sélectionnée le bouton apparaît
         if (e.getStateChange()==ItemEvent.SELECTED)
            button1.setVisible(true);
      }

      void checkbox2_itemStateChanged(ItemEvent e) {
      // lorsque cette case est sélectionnée le bouton disparaît
         if (e.getStateChange()==ItemEvent.SELECTED)
            button1.setVisible(false);
      }
   }
 

Le code HTML de la page appelant l'applet :
 

<HTML>
    <HEAD>
          <TITLE> Applet-Bonjour </TITLE>
    </HEAD>
    <BODY>
        <p>Sortie de l'Applet-Bonjour :</p>
        <APPLET CODE="Applet_TextFieldArea.class" WIDTH=400 HEIGHT=200>
        </APPLET>
     </BODY>
</HTML>

Remonter