Java/Swing- Delphi
Exemple en Java sur
les zones de texte multi-lignes

Objectif : Application simple Java utilisant deux objets de classe JTextArea.



 

La fenêtre comporte un bouton (JButton jButton1), un éditeur mono-ligne(JTextField jTextField1) et deux éditeurs de texte multi-lignes (JTextArea  jTextArea1, jTextArea2):


 

L'application consiste après qu'un texte ait été entré dans le jTextField1, sur le clic du bouton jButton1 à déclencher l'ajout de ce texte dans jTextArea1 (éditeur de gauche).

Le JTextArea délègue la gestion des barres de défilement à un objet conteneur dont c'est la fonction le JScrollpane, ceci a lieu lorsque le JTextArea est ajouté au JScrollpane.
 

Gestion des barres de défilement du texte

Afin de  bien comprendre la gestion des barres de défilement verticales et horizontales, le programme ci-dessous contient deux objets jTextArea1 et jTextArea2 dont le premier est déposé dans un objet conteneur de classe JScrollpane (classe encapsulant la gestion de barres de défilements), selon l'un des deux codes sources suivants :
 
 
//  les déclarations :
JScrollPane jScrollPane1 = new JScrollPane( );
JTextArea jTextArea1 = new JTextArea( );

// dans le constructeur de la fenêtre JFrame :
this.getContentPane( ).add(jScrollPane1, null);
jScrollPane1.getViewport( ).add(jTextArea1, null);

ou bien en utilisant un autre constructeur de JScrollPane :
 
// les déclarations :
JTextArea jTextArea1 = new JTextArea( );
JScrollPane jScrollPane1 = new JScrollPane( jTextArea1 );

// dans le constructeur de la fenêtre JFrame :
this.getContentPane( ).add(jScrollPane1, null);

Voici en résumé ce qu'il se passe lors de l'exécution de ce code (visualisation avec le RAD JBuilder conseillée) :

 
 

Schémas UML du projet

 

En Java (JBuilder)

Comme en java tous les événements sont interceptés par des objets écouteurs, ci-dessous nous donnons les diagrammes UML des classes utilisées par le programme qui est proposé :

Rappelons que la classe Cadre1$1 est une classe anonyme créée lors de la déclaration de l'écouteur du bouton jButton1, Java 2 crée donc dynamiquement un objet écouteur interne (dont la référence n'est pas disponible). Ci-dessous le diagramme jGrasp de la classe anonyme cadre1$1 :

Cadre1$1:


 

Enfin pour terminer, voici le listing Java/Swing complet de la classe représentant la fenêtre (y compris le deuxième JTextArea de vérification) :

package ExempleJList;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Cadre1 extends JFrame {
  JTextField jTextField1 = new JTextField();
  JButton jButton1 = new JButton();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea2 = new JTextArea();
  JTextArea jTextArea1 = new JTextArea();

   //Construire le cadre
  public Cadre1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try  {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  //Initialiser le composant
  private void jbInit() throws Exception  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(265, 260));
    this.setTitle("Editeur JTextArea dans Swing");
    jTextField1.setText("jTextField1");
    jTextField1.setBounds(new Rectangle(15, 155, 216, 23));
    jButton1.setText("jButton1");
    jButton1.setBounds(new Rectangle(39, 192, 152, 23));
    jButton1.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });
    jScrollPane1.setBorder(null);
    jScrollPane1.setBounds(new Rectangle(16, 18, 103, 122));
    jTextArea2.setText("jTextArea2");
    jTextArea2.setBounds(new Rectangle(129, 20, 101, 121));
    jTextArea1.setText("jTextArea1");
    this.getContentPane().add(jScrollPane1, null);
    jScrollPane1.getViewport().add(jTextArea1, null);
    this.getContentPane().add(jTextArea2, null);
    this.getContentPane().add(jTextField1, null);
    this.getContentPane().add(jButton1, null);
  }

 //Remplacé (surchargé) pour pouvoir quitter lors de System Close
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if(e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
     jTextArea1.append(jTextField1.getText()+"\n");
     jTextArea2.append(jTextField1.getText()+"\n"); // copie pour vérification visuelle
  }
}
 

Remonter