Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UN JTEXTPANE NOTICE : JEU DE STYLES PRÉDÉFINIS ET INSERTION TEXTE TRÈS FACILE ! (AVEC L'AIMABLE AIDE DE SHEOROGATH)


Information sur la source

Catégorie :Astuces Classé sous : notice, jpanel, style, prédéfini Niveau : Débutant Date de création : 15/05/2007 Date de mise à jour : 21/05/2007 22:54:49 Vu / téléchargé: 5 577 / 217

Note :
Aucune note

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
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

  • 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);
  • }
  • }
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 :)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

19 mai 2007 11:06:58 :
Ajouts de crédits (Sheorogath) pour la future modification .
21 mai 2007 22:54:50 :
Annonce : le projet est abandonné

Commentaires et avis

signaler à un administrateur
Commentaire de sheorogath le 15/05/2007 21:04:53 administrateur CS

mieux aurais valu que tu fasses un code permettant de specifier ce que l'on veux comme effet sur un morceau de texte comme je le fais ici (je suis pas sur que cette version sois complete je l'ai recupere sur ma source du package de creation 2D):

package com.daedric.swing;

import java.awt.Color;

import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.EditorKit;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;

public class DJTextPane extends javax.swing.JTextPane {
/**
*
*/
private static final long serialVersionUID = -8905324578389242069L;

public transient static Style def = StyleContext.getDefaultStyleContext()
.getStyle(StyleContext.DEFAULT_STYLE);

public transient Style style;

public DJTextPane() {
style = addStyle("default", def);
}

public DJTextPane(StyledDocument doc) {
super(doc);
style = addStyle("default", def);
}

public void append(String mess) {
this.appendMess(mess, Color.black);
}

public void appendMess(String s, Color col) {
try {
StyleConstants.setForeground(style, col);
Document doc = getDocument();
doc.insertString(doc.getLength(), s + "\n", getStyle("default"));
setCaretPosition(getDocument().getLength());
} catch (BadLocationException e) {
e.printStackTrace();
}
}

public void setBold(boolean b) {
StyleConstants.setBold(style, b);
this.setCharacterAttributes(style, true);
}

public void setUnderLine(boolean b) {
StyleConstants.setUnderline(style, b);
this.setCharacterAttributes(style, true);
}

public void setSize(int s) {
StyleConstants.setFontSize(style, s);
this.setCharacterAttributes(style, true);
}
public void setStrike(boolean b) {
StyleConstants.setStrikeThrough(style, b);
this.setCharacterAttributes(style, true);
}

public void setItalic(boolean b) {
StyleConstants.setItalic(style, b);
this.setCharacterAttributes(style, true);
}

public boolean isItalic() {
return StyleConstants.isItalic(style);
}

public boolean isBold() {
return StyleConstants.isBold(style);
}

public boolean isUnderLined() {
return StyleConstants.isUnderline(style);
}

public boolean isStrike() {
return StyleConstants.isStrikeThrough(style);
}


}

signaler à un administrateur
Commentaire de loloof64 le 16/05/2007 18:46:43

Salut Sheorogath :)
Je te remercie énormément de m'avoir démontré que je pouvais mieux faire. Serais-tu d'accord pour que je te nomme en crédit du champ Explication Finale et que je reprenne à peu près ton code ? (Je te créditerais même dans le champ le plus important : Description si j'en ai la possibilité).
En fait, c'est quoi la clause "transient" ?

signaler à un administrateur
Commentaire de sheorogath le 16/05/2007 19:12:39 administrateur CS

bien sur avec plaisir faut bien que ca serve :p

transient indique a une variable qu'elle ne dois pas etre serialisé

par exemple si tu fais une classe serialisable qui contient des champ image il faut les declarer transient sinon lors de la serialisation ca declenche un bug

signaler à un administrateur
Commentaire de loloof64 le 17/05/2007 12:58:33

Merci beaucoup,

dans les prochaines heures ou prochains jour j'adapterais ton code et te créditerais sur ma page de Codes-Sources et dans le fichier Java (les fichiers textes dans les .zip étant jugés inutiles :( :( :( ).

signaler à un administrateur
Commentaire de sheorogath le 17/05/2007 12:59:27 administrateur CS

ok pas de probleme

signaler à un administrateur
Commentaire de loloof64 le 17/05/2007 14:05:04

A ce propos, 2 questions sur la sérialisation :
--- 1) Est-ce parce que la classe java.awt.Image est abstract , et donc ne constitue pas une JavaBean (cf. Snippet de Neodante sur codyx.org : Sérializer/désérialiser une classe en XML) qu'elle doit être déclarée transient pour pouvoir éviter de générer tout bug ? En est-il de même pour l'interface java.awt.image.ImageObserver ? ( J'ai tant de choses à apprendre, décidément ... :) D'où la nécessité de m'organiser pour ne pas perdre ce que je sais déja ... quels  
qu'en soient les délais :( ) .
--- 2) Parles-tu de toutes les sérialisations possibles (prédéfinies comme personnelles) ou juste de la sérialisation à l'aide de java.beans.XMLEncodeur et java.beans.XMLDecodeur ?

signaler à un administrateur
Commentaire de sheorogath le 17/05/2007 14:11:55 administrateur CS

pour la classe Image oui elle est abstract apres je ne parlais pas de serialisation xml juste de ObjectOutputStream

signaler à un administrateur
Commentaire de loloof64 le 21/05/2007 22:56:41

Salut Sherogath, tu as peut être remarqué, tu es crédité sur le projet, mais je l'ai tout de même abandonné. En effet, je n'ai pas réussi à établir un mixage efficace entre nos deux codes.
Salut :(

signaler à un administrateur
Commentaire de loloof64 le 21/05/2007 22:58:06

Il faudrait peut être que je songe à poster mes sources que si elles valent vraiment le coup :(

signaler à un administrateur
Commentaire de sheorogath le 22/05/2007 20:28:05 administrateur CS

lol c pas bien dur ^^
tu peux creer une methode qui ajoute du texte tu prends en param un String et qui ajoute en mettant les couleurs et les styles que tu veux ^^
genre :

public void titre(String txt){
   setSize(size);
   setColor(Color.red);
   append(txt);
  }

signaler à un administrateur
Commentaire de till2 le 30/05/2007 15:31:08

Savez vous comment sauver le DefaultStyledDocument ? comment enregistrer le texte avec sa mise forme?
Merci

signaler à un administrateur
Commentaire de sheorogath le 30/05/2007 15:35:15 administrateur CS

RTFEditorKit
je te copis un morceau de code dans la soiree si j'y pense :p

signaler à un administrateur
Commentaire de till2 le 30/05/2007 15:38:22

Merci c'est sympa ...J'ai testé avec une base de donnée (le champ type OLE, car c'est une base ACCESS mais rien y fait ! je suis bloqué !  ) Donc si t'a un exemple de serialisation ou quelque chose je prend volontier !
Merci

signaler à un administrateur
Commentaire de sheorogath le 03/06/2007 16:35:13 administrateur CS

till2 : http://www.javafr.com/code.aspx?ID=42977

loloof64 : c'est ce que je voulais que tu fasse de ta source ^^ bon je la laisse quand meme je n'ai pas implemente le hightligth

signaler à un administrateur
Commentaire de till2 le 03/06/2007 23:53:39

ok sheorogath, merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

bouton [ par Aldee ] J'arret avec les questions sur les boutons apres. c'est la dernière.Je veux mettre un bouton dans un JPanel-OK.Je veux le mettre à des coordonnées spe Java 3D et mouse Navigation [ par neric ] Je voudrais faire une navigation à la souris style Quake, CS, bref FPS. MAis je rencontre quelque problème.donc, si quelqu'un à un code ou un site par Java 3D et mouse Navigation [ par neric ] Je voudrais faire une navigation à la souris style Quake, CS, bref FPS. MAis je rencontre quelque problème.donc, si quelqu'un à un code ou un site par supprimer une Jpanel [ par sanpexos ] Bonjour tout le mondeJ'ai un certain nombre de panneaux (JPanel) et j'aimerais tous les supprimer d'un coup lors du début d'une classe.Comment puis-je Scroll [ par MELISA ] Bonjour,Mon pb est le suivant:- je veux inserer un gif dans un JPanel, lui-même contenu dans un autre JPanel (je suis obligée d'utiliser un Panel au l compatibilite graphique j2sdk 1.4 et 1.3 [ par jbval ] Salut,g 1 pb avec une interface en java.Je crée des carrés dans un JPanel et tout marche avec la j2sdk 1.3 mais lorsque je veux executer le même code JTree [ par demonc ] Voila mon code . bonne chance et merci public class JRep implements ActionListener{ private JButton b1, b2; private JTree TreeLocal, TreeRemote; pri pb de visibilite ou plutot d invisibilite [ par benohite ] bonjour j ai cree une frame qui se construit a partir de 3 jpaneldans chaque jpanel je place un bouttonet j affiche le toutle pb c est que je ne vois Communication entre 2 classes pour une applet [ par Warwick ] Bonjour, je débute le java, et j'ai quelques petits problèmes pour faire communiquer 2 classes entre elles et j'aurais besoin de votre aide...Mon appl acceder a la largeur et la hauteur d'un JPanel [ par Frouf85 ] Bonjour bonjour,en faisant des getWidth() et get height(), je n'arrive pas a recupérer la taille de mon JPanel, c'est à dire qu'elle est toujours égal


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.