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 :

Ajout de la fonction "paste" à un JComponent


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut Ajout de la fonction "paste" à un JComponent
    Bonjour à tous,

    j'ai créé une petite appli qui se contente d'afficher 2 images dans 2 Jlabels dfferents et permet la copie de l'un vers l'autre grâce à un transferHandler écrit par mes soins.

    le DnD(drag and drop) à la souris fonctionne trés bien.

    Mais je voudrais rajouter la possibilité de coller une image venant du presse papier grâce à un "ctrl+V"

    pour cela j'ajoute ces deux lignes de code qui devrait suffir, mais ca ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    label1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK), "paste");
    label1.getActionMap().put("paste", TransferHandler.getPasteAction());
    Je sais que normalement les Jlabel ne sont pas utilisés pour être séléctionné et donc copier des choses dedans donc j'ai essayé sur un JTextField egalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    textField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK), "paste");
    textField.getActionMap().put("paste", TransferHandler.getPasteAction());
    je lance l'appli fait un "ctrl+c" sur du texte dans un editeur, me place dans le JTextField et fais "ctrl+v". mais rien ne se passe...

    aurais je looper une étape?

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut
    personne pour m'aider?

  3. #3
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    repeindre le textField après modification, je crois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTextField.repaint();
    oui ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je ne sais pas comment fonctionne le "TransferHandler.getPasteAction()", mais pour recevoir l'action le JLabel doit avoir le focus... ce qui n'est pas le cas lorsqu'on clique dessus...

    Essayes de forcer le focus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	label.addMouseListener(new MouseAdapter() {
    		@Override
    		public void mouseClicked(MouseEvent e) {
    			e.getComponent().requestFocusInWindow();
    		}
    	});
    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut
    D'abord merci pour vos reponses^^

    @Fraco: je ne pense pas que le repaint change quelquechose ici car dans le cas du JLabel la copie depuis et vers un autre element par le DnD marche correctement...je pensais justement à un soucis de focus comme en parle AdiGuba.

    @Adiguba : j'avais justement tenté de de contourner ce probleme de focus en forcant la selection d'1 des 3 InputMap à savoir la "WHEN_IN_FOCUSED_WINDOW" avec les lignes de code suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    label1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK), "paste");
    Mais ca ne fonctionnait pas, je vais essayer ta solution, je ne savais pas comment donner le focus directement au JLabel

    Merci pour votre aide!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 46
    Par défaut
    Bonjour ^^

    Bon ben j'ai essayé mais ca ne fonctionne toujours pas...

    et je ne sais plus trop ou chercher

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #8
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 47
    Par défaut
    Je tente de te proposer une idée, mais je n'ai aucune idée quand à sa faisabilité

    Pourquoi ne pas utiliser un autre composant pour le paste, invisible éventuellement, et tu redirige le résultat vers le composant (le JLabel)?


    Maintenant ça c'est pour le focus etc... Pour le drop qui ne fonctionne pas, même dans un JTextField, ça ne viendrait pas du fait que la classe image n'est pas sérialisable?


    (J'essaye d'aider, mais je suis surement plus dans le vague que toi )

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ou simplement faire un setFocusable(true) sur ton JLabel...

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