Objectif : Application simple Java utilisant deux objets de classe JTextArea.
- Même exemple, code source en Delphi
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
}
}