IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

JEditorPane et espaces


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut JEditorPane et espaces
    voila je me suis retrouvé confronté à un petit problème avec les espaces dans un JEditorPane.

    pour afficher les espaces au format HTML il m'a fallu les tranformer en " " mais après quand on fait du copier coller depuis le JEditorPane on obtient la valeur de l'espace A0 en hexa alors qu'elle dervait être de 20 et donc certains programmes ne comprennent pas la valeur A0 donc il est impossible de copier coller depuis.

    quelqu'un saurait comment faire pour avoir des espaces normaux?

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    J'ai pas bien vu - j'ai pas bien su - je suis pas sûr, mais je pense :

    1) que si tu dois mettre des   pour avoir des espaces, c'est que d'une façon ou d'une autre ton JEditorPane considère que ton document c'est du HTML.

    2) par conséquent :

    2a) tu gardes le HTML, et lors du copié / collé il faut que tu signales à l'appli collante que c'est du HTML ; usuellement, cela se fait par l'intérmédaire du type mime donné dans le presse papier.

    2b) et / ou tu veux pas garder le HTML, il faut que tu fasses la transformation au chargement de ton document. Bon courage, mais ce n'est pas complètement impossible.

    A+.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    en fait l'application permet d'afficher des morceaux de code avec de la couleur et dans la même fenêtre il y a des liens mais le but serait de pouvoir copier les bouts de code comme depuis internet explorer ou autre.

    je suis donc obligé de garder le format html le problème c'est que par exemple il n'est pas possible de copier un bout de code sous eclipse après.

    est-ce qu'il est possible de modifier directement la selection pour ce qui sera envoyé au presse-papier ou y a-t-il une autre solution?

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Tu peut envisager de ne pas employer du HTML, mais plutôt un StyledDocument avec un JTextPane, ainsi, tu n'auras pas de problèmes de html.

  5. #5
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Je ne sais pas comment tu fais tes manips, mais il faut travailler avec tout ce que permet Clipboard.setContents(Transferable contents, ClipboardOwner owner). Tu pourras trouver un guide à How to Use Drag and Drop and Data Transfer.

    En tous les cas, si ton document d'origine est HTML, et ton document destination est du texte brut, il est clair qu'il faudra que tu fasses la transformation

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    Citation Envoyé par spekal
    Je ne sais pas comment tu fais tes manips, mais il faut travailler avec tout ce que permet Clipboard.setContents(Transferable contents, ClipboardOwner owner). Tu pourras trouver un guide à How to Use Drag and Drop and Data Transfer.

    En tous les cas, si ton document d'origine est HTML, et ton document destination est du texte brut, il est clair qu'il faudra que tu fasses la transformation
    ca m'a l'aire intéressant je viens de regarder un peu je crois que ca pourrait peut être résoudre le problème.

    merci je tiendrai au courant si j'arrive à règler le problème grâce à ça et je donnerai la solution

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    j'ai trouvé grâce aux TransferHandler voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    import javax.swing.JComponent;
    import javax.swing.JEditorPane;
     
    public class ModifiedTransferHandler extends StringTransferHandler {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 6137544573949788813L;
     
    	@Override
    	protected String exportString(JComponent c) {
    		JEditorPane ep = (JEditorPane) c;
    		String buffer = ep.getSelectedText();
    		/*
    		 * remplacement des saut de ligne html (20 en hexa et 32 en decimal) par
    		 * un saut de ligne \n
    		 */
    		buffer = buffer.replace(new String(new byte[] { (byte) 32 }), "\n");
    		/*
    		 * remplacement des espaces html (A0 en hexa 160 en decimal) par un
    		 * espace normal (20 en hexa et 32 en decimal).
    		 */
    		buffer = buffer.replace(new String(new byte[] { (byte) 160 }),
    				new String(new byte[] { (byte) 32 }));
    		return buffer;
    	}
     
    	@Override
    	protected void importString(JComponent c, String str) {
     
    	}
     
    	@Override
    	protected void cleanup(JComponent c, boolean remove) {
    		// TODO Raccord de méthode auto-généré
     
    	}
     
    }
    qui étend la classe offerte sur la page d'aide : http://java.sun.com/docs/books/tutor...erHandler.java

    et il suffit de transformer tous les espaces du JEditorPane par des &nbsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer = buffer.replace(" ", " ");
    et tous les saut de ligne par <br> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer = buffer.replace("\n", "<br>");
    avant de mettre le buffer dans le JEditorPane.
    et à la création on devra lui definir son TransferHandler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ep.setTransferHandler(new ModifiedTransferHandler());
    en tout cas grand merci pour l'aide maintenant ça marche parfaitement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  3. Réponses: 2
    Dernier message: 06/12/2002, 07h50
  4. Accéder à un espace mémoire sous XP
    Par keny dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2002, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo