Accueil
Accueil
Le
Club
Delphi
Kylix
C
C++
Java
J2EE
DotNET
& C#
Visual
Basic
Access
Pascal
Dev
Web
PHP
ASP
XML
UML
SQL
SGBD
Win
Linux
Autres



Comment faire un JLabel de plusieurs lignes ?
auteur : Clément Cunin
Le HTML :
La plus simple des méthodes pour avoir un texte sur plusieurs lignes est d'utiliser l'interpréteur HTML du JLabel. Pour cela il faut que le texte soit entouré des balises '<html>' et '</html>'. Ensuite il faut remplacer les "\n" par des balises '<br>', et le tour est joué !

new JLabel("<html>ligne 1<br>ligne 2<br>etc...</html>");
Le composant texte :
Il est également possible d'utiliser un javax.swing.JTextArea plus pratique à mettre en place que la version Html si le texte n'est pas fixé dans le code... Cette solution est néanmoins plus contraignante sur la mise en page et sur la gestion de l'apparence (par défaut le JTextArea n'a pas les mêmes couleurs qu'un JLabel).
(Un exemple est disponible en téléchargement)

JTextArea label = new JTextArea(); label.setText(text); label.setEnabled(false);
La solution de la brute :
Empiler 2 ou 3 JLabel les uns au dessus des autres devrait faire l'affaire :-).

téléchargement : Exemple de texte multi-ligne en utilisant un JTextArea.

Comment faire un JTextArea avec un retour à la ligne automatique ?
auteur : Clément Cunin
Tout simplement en utilisant les méthodes setLineWrap(boolean) et setWrapStyleWord(boolean) de la classe javax.swing.JTextArea.

/** On souhaite un retour à ligne automatique : */ monTextArea.setLineWrap(true); /** On souhaite que les mots ne soient pas coupés : */ monTextArea.setWrapStyleWord(true);

Comment permettre la saisie de mot de passe ? (texte saisi avec des étoiles)
auteur : Johann Heymes
Awt

TextField txt = new TextField (); txt.setEchoChar ('*');
Swing

JPasswordField txt = new JPasswordField (); txt.setEchoChar ('*')

Comment contraindre la saisie dans un composant texte ?
auteur : Johann Heymes
Exemple :
Comment autoriser l'utilisateur à ne saisir que des entiers dans un champ texte. Trois solutions s'offrent à vous :
  • écouter les évènements ;
  • modifier le modèle du composant texte ;
  • utiliser la classe javax.swing.JFormattedTextField (dispo seulement depuis le JDK 1.4).

Solution 1, les écouteurs (listener) :
Il s'agit sûrement des premières solutions auxquelles on pense mais ce ne sont pas les plus simples à mettre en place ni les plus jolies. Je parle ici évidemment de java.awt.event.KeyListener ou javax.swing.event.DocumentListener et autres du même genre. Pour moi, ces solutions sont des solutions de rattrapage car techniquement elles permettent uniquement de nous informer d'un changement. Or si le changement est fait cela veux donc dire que le « mal » est déjà fait. Ce qui signifie que le composant texte à un moment donné est dans une situation non cohérente. Je m'arrêterai donc là sur ce sujet.

Solution 2, modification du modèle :
La notion de modèle provient du design pattern  MVC, Model-View-Controller Architecture, le but ici est donc de modifier directement ce que peut contenir un composant texte en ignorant tout le reste. Pour se faire il suffit de créer une classe qui dérive du modèle auquel le composant texte est associé. Pour information nous avons :
  • JTextField et JTextArea : PlainDocument ;
  • JEditorPane et JTextPane : DefaultStyledDocument.
Ces deux classes implémentent toutes deux l'interface javax.swing.text.Document qui définit entre autres la méthode insertString(int, java.lang.String, javax.swing.text.AttributeSet) et remove(int, int). Il suffit donc de créer une classe qui dérive de la classe modèle apropriée et de rédéfinir la ou les méthodes nécessaires. Notons que ces deux méthodes insertString et remove seront appelées automatiquement par les classes de Sun à chaque ajout ou suppression de chaîne. Notre redéfinition doit donc avoir pour but de valider ou non l'action. Par conséquent on notera que l'intégrité du composant texte n'est jamais bafouée (voir démo ci-dessous.)

Solution 3, la classe :JFormattedTextField
Une toute nouvelle classe fait son apparition dans la version 1.4 du JDK. L'exemple ici est très réducteur de ces capacités mais la prise en main est peut-être moins évidente. En tout cas le résultat et là et il est même largement meilleur... regardez l'exemple :-)

lien :  Model-View-Controller Architecture
téléchargement : Exemple d'implémentation de la solution 2
téléchargement : Exemple d'implémentation de la solution 3

Comment avoir un éditeur de texte avec plusieurs styles de mise en page ?
auteur : Johann Heymes
Quel composant choisir ?
Vous avez le choix entre JTextPane et JEditorPane. En effet, ce sont les seuls à utiliser comme "Model" (Cf Model-View-Controller Architecture) un composant dérivant de AbstractDocument et implémentant l'interface StyledDocument.

Mise en page à la création :
Si la mise en page est fixée lors de la création du document, il suffit de récupérer le Model du composant texte.

JTextPane monComposantTexte = new JTextPane (); DefaultStyledDocument doc = (DefaultStyledDocument) monComposantTexte.getDocument (); doc.insertString (offset, "texte à ajouter", /** [un style d'écriture] */);
Style déterminé a l'insertion :
Si le style est connu lors de l'insertion, il faut créer une classe qui hérite de DefaultStyledDecument et redéfinir la méthode insertString(). Exemple pour écrire tout le texte avec le style nomme styleNormal sauf si l'on insert le mot 'HELP' :

/** Redéfini pour choisir l'effet de style à utiliser */ public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { try { /** si le texte inséré est égal à HELP le texte s'écrit * avec le style "styleOp" */ if ( str.equals ("HELP") ) { super.insertString (offs, str, getStyle ("styleOp")); } else { /** Sinon le texte est écrit avec le style "styleNormal" */ super.insertString (offs, str, getStyle ("styleNormal")); } } catch (BadLocationException e) { System.out.println ("Tuuuttt erreur Insere"); } }
(Voir l'exemple fourni.)

Modifier le Style après l'insertion :
Pour cela il faut soit récupérer le Model du composant Texte, soit créer sa propre classe dérivant de DefaultStyledDocument.

JTextPane monComposantTexte = new JTextPane (); DefaultStyledDocument doc = (DefaultStyledDocument) monComposantTexte.getDocument (); doc.setCharacterAttributes (positionDeDepart, longueur, style, true);
Voir l'exemple fourni.)

téléchargement : Editeur de texte simple, avec changement d'attribut d'une portion de texte

Comment rendre visible le dernier ajout de texte dans un JTextComponent ?
auteur : Johann Heymes
Deux solutions possibles :

On peut déplacer le "caret" :

monTextArea.setCaretPosition(monTextArea.getDocument().getLength ());
On demande au JTextComponent de transmettre à son parent les coordonnées d'un point qui doit être visible.

try { int longueur = monTextArea.getDocument().getLength(); Rectangle rectangle = monTextArea.modelToView(longueur); monTextArea.scrollRectToVisible(rectangle); } catch (javax.swing.text.BadLocationException err) { }
téléchargement : MonJTextArea.java

Comment obtenir la liste des polices de caractères ?
auteur : Clément Cunin
Avant d'utiliser une police de caractères, il est fortement recommandé de vérifier qu'elle est présente sur le système. Les systèmes alternatifs disposent rarement des mêmes polices que Windows.

GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); /** Liste de toutes les polices : */ Font[ ] polices = environment.getAllFonts(); /** Liste des noms de toutes les polices : */ String[ ] nomPolices = environment.getAvailableFontFamilyNames();
lien : Comment dessiner en Java ?


Consultez les autres F.A.Q's

Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs.

Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs :

- Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement :
"Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement".

- Pour ce qui est des autres contributions : Copyright © 2004 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright 2000..2004 www.developpez.com