Un jtextpane notice : jeu de styles prédéfinis et insertion texte très facile ! (avec l'aimable aide de sheorogath)

Description

C'est un JTextPane qui peut servir de notice : il a déjà son javax.swing.text.Document intégré, son jeu de javax.swing.text.Style et une fonction qui permet d'ajouter très simplement du texte, sans que l'utilisateur ait à agir sur le Document.

Une nouvelle version, grâce à l'aide Sheorogath, devait voir le jour : mais, ne me jugeant pas capable de produire du beau en faisant un mix de son code et du mien ... j'ai décidé de laisser tomber ce projet.

Source / Exemple :


package com.loloof64.commons;

import java.awt.Color;

import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;

/**

  • Un JTextPane avec un jeu de styles prédéfinis, et une méthode simplifiée
  • d'ajout de texte stylisé, afin de construire des panneaux notices
  • d'application .<br>
  • Une bonne idée d'utilisation de ce panneau : coinjontement avec le
  • panneau principal dans un JTabbedPane .
  • @author laurent bernabé
*
  • /
public class JNoticePane extends JTextPane { /**
  • Variable de série .
  • /
private static final long serialVersionUID = 2373862850234541630L; /**
  • Le document associé .
  • /
private DefaultStyledDocument documentAssocie = new DefaultStyledDocument(); /**
  • Constructeur .
*
  • /
public JNoticePane(){ setDocument(documentAssocie); definirLesStyles(); } public void definirLesStyles(){ Style styleRacine = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE); Style racine = this.addStyle("normal", styleRacine); StyleConstants.setBold(racine, false); Style titreGeneral = this.addStyle ("titreGeneral", styleRacine); StyleConstants.setBold(titreGeneral, true); StyleConstants.setFontSize(titreGeneral, 20); StyleConstants.setFontFamily(titreGeneral,"Times New Roman"); StyleConstants.setBackground(titreGeneral, Color.green); StyleConstants.setForeground(titreGeneral, Color.blue); Style noteTresImportante = this.addStyle ("noteTresImportante", titreGeneral); StyleConstants.setBackground(noteTresImportante, Color.yellow); StyleConstants.setForeground(noteTresImportante, Color.red); Style titreNiveau1 = this.addStyle ("titreNiveau1", styleRacine); StyleConstants.setUnderline(titreNiveau1, true); StyleConstants.setForeground(titreNiveau1, Color.red); Style titreNiveau2 = this.addStyle ("titreNiveau2", titreNiveau1); StyleConstants.setForeground(titreNiveau2, Color.green); } /**
  • Ajoute un texte stylisé juste àprès la fin du document associé.
  • @param text - String - Texte avec ou sans "\n" .
  • @param style String : l'une des chaînes suivante :
  • <ul>
  • <li> "normal"
  • <li> "titreGeneral"
  • <li> "titreNiveau1"
  • <li> "titreNiveau2"
  • <li> "noteTresImportante"
  • </ul>
  • @throws BadLocationException - Normallement si cela arrive, c'est de
  • ma propre faute. En effet, la fonction interne appelée (Document#insertString) comporte
  • ce risque, mais l'utilisation que j'en fait ne devrais pas le faire apparaître.
  • /
public void appendStyledLineText(String text, String nomStyle) throws BadLocationException{ documentAssocie.insertString(documentAssocie.getLength(), text, documentAssocie.getStyle(nomStyle)); } /**
  • Ajoute un texte stylisé dans le document associé, à la position précisée
  • par l'entier offset.
  • @param offset - int - Offset d'insertion du texte .
  • @param text - String - Texte avec ou sans "\n" .
  • @param style String : l'une des chaînes suivante :
  • <ul>
  • <li> "normal"
  • <li> "titreGeneral"
  • <li> "titreNiveau1"
  • <li> "titreNiveau2"
  • <li> "noteTresImportante"
  • </ul>
  • @throws BadLocationException - Si l'offset ne correspond pas.
  • /
public void appendStyledLineTextAt(int offset, String text, String nomStyle) throws BadLocationException{ documentAssocie.insertString(offset, text, documentAssocie.getStyle(nomStyle)); } /**
  • Retourne le style de nom nomStyle.
  • @param nomStyle - String : l'une des chaînes suivante :
  • <ul>
  • <li> "normal"
  • <li> "titreGeneral"
  • <li> "titreNiveau1"
  • <li> "titreNiveau2"
  • <li> "noteTresImportante"
  • </ul>
  • /
public Style getStyle(String nomStyle){ return documentAssocie.getStyle(nomStyle); } }

Conclusion :


Je pense à une version qui prend en entrée un fichier XML (avec des tuples {style,texte} ).

Merci à Sheorogath, membre de Codes Sources, pour ses commentaires très instructifs :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.