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

Composants Java Discussion :

jTextPane -> Comment alerté un copier / coller ?


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut jTextPane -> Comment alerté un copier / coller ?
    Bonjour,

    Après plusieurs recherches sur le net, je n'ai pas trouvé réponse à ma question, c'est pour cela que je vient ici pour trouvez la réponse.

    J'ai un jTextPane où je peux faire du copier/coller.
    Je souhaite, grâce à des évènements, afficher à l'écran dans une nouvelle fenetre ce que je vient de coller dans mon jTextPane. Comment puis-je faire ?

    Merci d'avance de vos réponses,

  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,
    pourquoi tu ne redéfinirais pas la méthode insertString de Document, et à chaque insertion, tu testes si le texte inséré est égal au contenu du presse-papier (clipboard)
    un exemple
    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
     
    JTextPane txt = new JTextPane();
    Document doc = new DefaultStyledDocument(){
    	public void insertString(int offset, String str, AttributeSet a)
    		  throws BadLocationException
    	{
    		Clipboard clipBrd = Toolkit.getDefaultToolkit().getSystemClipboard();
    		DataFlavor dataFlavor = new DataFlavor(String.class, null);
    		try{
    			String copie = (String)clipBrd.getData(dataFlavor);
    			if (copie != null)
    				if (copie.equals(str))
    					System.out.println(copie);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		super.insertString(offset, str, a);
    	}
    };
    txt.setDocument(doc);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Merci je vais regarder cette solution.
    Et je redit demain si ça marche chez moi !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Rebonjour,

    Ça marche impeccable, cependant je n'arrive pas à savoir quand l'utilisateur fait un "ctrl+v".
    .getKeyCode() me donne 17 car je fais "ctrl" puis me donne 86 car je fais "v", mais je n'arrive pas à savoir quand il fait un "ctrl+v".

    Quelqu'un aurait-il une solution pour m'aider ?

    Merci d'avance,


    Edit :
    J'ai fait ce que tu m'as donné, cependant j'aimerais récupérer ce qui a été collé sans remplacer tout mon jTextPane par ce que je viens de coller.
    Comment puis-je faire cela ?

    Encore merci de vos aides !

  5. #5
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,
    tu pourrais tester si la touche Ctrl est enfoncé quand tu testes si la touche préssé est v
    pour me faire comprendre, voici un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    txt.addKeyListener(new KeyAdapter()
    {
    	public void keyPressed(KeyEvent ke)
    	{
                    //On teste si la touche pressé est "v"
    		if (ke.getKeyCode() == KeyEvent.VK_V)
    		{
                           //on teste si Ctrl est aussi pressé
    			if (ke.isControlDown())
    				System.out.println("Ctrl+v");
    		}
    	}
    });
    J'ai fait ce que tu m'as donné, cependant j'aimerais récupérer ce qui a été collé sans remplacer tout mon jTextPane par ce que je viens de coller.
    Comment puis-je faire cela ?
    j'ai pas compris!!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Bonjour,

    Dans le code que tu as posté plus haut il y a "txt.setDocument(doc);" cependant si j'enlève cette ligne le code marche plus car la fonction dans "doc" n'est plus appelé, logique.
    Je veut enlever la ligne "txt.setDocument(doc);" car ça me modifie entièrement mon jTextPane.

    Comment puis-je faire pour que la fonction "insertString" de "doc" soit appelée sans que mon jTextPane soit entièrement modifié ?

    En espérant que ce que je viens d'écrire soit plus compréhensible.

    Merci de vos réponses,

  7. #7
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    en quoi ta JTextPane change??
    car je vois pas d'autres solutions que de redéfinir la méthode insertString de Document.
    il y a bien la méthode insertUpdate de DocumentListener, mais il y a pas moyen de récupérer la chaine inséré pour la comparer avec la chaine dans le clipboard

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Bah quand je fais "txt.setDocument(doc);" tout le contenu de txt est remplacé par le contenu de doc.

  9. #9
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Bah quand je fais "txt.setDocument(doc);" tout le contenu de txt est remplacé par le contenu de doc.
    j'ai pas compris ce que ça veut dire!! quel contenu de doc?? doc est seulement un Document dont on redéfinit la méthode insertString, il n'a aucun contenu.
    mais bon, pour ce que j'ai dit tout à l'heure, j'avais tort, il y a une autre solution possible, tu peux enlever le code de création du Document et le setDocument qui te dérange tant, et tu peux le remplacer par un DocumentListener

    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
     
    txt.getDocument().addDocumentListener(new DocumentListener()
    {
    	public void insertUpdate(DocumentEvent e)
    	{
    		int debut = e.getOffset();	//on récupère la position du début du texte
    		int fin = e.getLength();	//on récupère la position de fin du texte inséré
    		Clipboard clipBrd = Toolkit.getDefaultToolkit().getSystemClipboard();
    		DataFlavor dataFlavor = new DataFlavor(String.class, null);
    		try{
    			String copie = (String)clipBrd.getData(dataFlavor);
    			String textInsere = e.getDocument().getText(debut, fin);
    			if (copie != null)
    				if (copie.equals(textInsere))
    					System.out.println(copie);
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    	}
    	public void removeUpdate(DocumentEvent e){}
    	public void changedUpdate(DocumentEvent e){}
    });
    et voudrais-tu bien expliquer le problème avec setDocument, car vraiment j'ai pas bien compris, puisque tu disais que le code marchait très bien

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Je te montre en exemple car je m'exprime mal, désolée.

    Voici ma jTextPane : Mon texte blabla
    J'ai dans mon presse papier : Ce que j'ai à collé
    Ensuite dans mon jTextPane je fait un ctrl+v.
    Mon jTextPane ressemble du coup à ça : Ce que j'ai à collé

    Donc un fois le coller dans mon jTextPane le contenu avant le coller a été "enlevé".

    Comprends-tu mieux ce que je veux dire ?

  11. #11
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    franchement je m'y perds, et je vois vraiment pas comment c'est possible.
    j'ai refait ton même exemple avec la méthode de seDocument et avec la 2eme méthode du DocumentListener,
    dans ma jTextPane : Mon texte blabla
    J'ai dans mon presse papier : Ce que j'ai à collé
    Ensuite dans mon jTextPane je fait un ctrl+v.
    Mon jTextPane ressemble du coup à ça : Mon texte blabla Ce que j'ai à collé
    le texte que je colle s'ajoute au texte déjà présent, et ne l'enlève pas, tu pourrais faire voir ton code ??

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Ah oui effectivement on n'a pas du tout la même chose, je comprends mieux pourquoi tu ne comprenais pas ce que je disais.


    Sinon j'ai trouvé une autre façon de faire avec ce que tu m'as donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (ke.getKeyCode() == KeyEvent.VK_V && ke.isControlDown())
    {
            Clipboard clipBrd = Toolkit.getDefaultToolkit().getSystemClipboard();
    	DataFlavor dataFlavor = new DataFlavor(String.class, null);
    	try{
    		String copie = (String)clipBrd.getData(dataFlavor);
    		if (copie != null)
    			System.out.println(copie);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    }
    Cela me semble convenir à ce que je souhaite, non?

  13. #13
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    apparemment ça devrait marcher, mais il vaut mieux tester et voir ce que ça donne, et si ça te convient

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 71
    Par défaut
    Ca marche effectivement.
    Je sais que c'est pas le mieux mais bon ...
    En tout cas je te remercie beaucoup de ton aide précieuse
    Bravo à toi et tes connaissances

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

Discussions similaires

  1. Classeur excel protégé : comment permettre le copier-coller
    Par forum2015 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2014, 19h18
  2. Réponses: 2
    Dernier message: 05/05/2014, 15h43
  3. [AC-2007] Comment empêcher le copier/coller sur un textbox?
    Par lakhdar16 dans le forum IHM
    Réponses: 5
    Dernier message: 22/01/2013, 12h46
  4. Comment empecher un copier coller dans plusieurs colonnes ?
    Par huyari dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/07/2012, 12h06
  5. comment empêcher le copier/coller dans une zone de texte
    Par hanafimohammed dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/05/2007, 21h57

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