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 :

[JAVA 6] transferHandler copy/paste


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut [JAVA 6] transferHandler copy/paste
    salut,
    je suis en JAVA 6 et veux faire du DND pour des JTree,
    avec TansferHandler, tout fonctionne très bien, mais c'est toujours mieux d'avoir plusieurs moyen de faire la même opération (je ne sais pas trop pourquoi, mais il parait que c'est comme ça). j'ai donc décidé de créer des bouton pour lesquels j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monBoutton.setAction(monHandler.getCopyAction();
    monAutreBoutton.setAction(monAutreHandler.getPasteAction();
    premier problème : cette opération ne donne rien, comme si il n'y a pas de actionPerformed dans les actions par défaut du handler !!!

    j'ai donc décidé de créer mon propre Clipboard (un objet static, toujours le même)
    dans mon transfer Handler, j'ai rajouter ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
        public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
            super.exportToClipboard(comp, monClipboardStatic, action);
        }
    et j'ai créé des classes qui étendent AbstractAction et qui appellent importData(JComponent c, Transferable t) et createTransferable(JComponent c) (respectivement pou coller et copier)
    les boutons qui utilisent ces actions fonctionnent bien,
    le souci maintenant, c'est avec les raccourcis clavier : ctrl+C et ctrl+V sont prédéfinis et je ne sais pas comment les enlever.
    en plus le crtl+C fonctionne parfaitement, parcontre, ctrl+V renvoie une erreur :'(
    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
    java.net.MalformedURLException: unknown protocol: java.net.malformedurlexception
            at java.net.URL.<init>(URL.java:574)
            at java.net.URL.<init>(URL.java:464)
            at java.net.URL.<init>(URL.java:413)
            at sun.awt.windows.WDataTransferer.translateBytesOrStream(WDataTransferer.java:204)
            at sun.awt.datatransfer.DataTransferer.translateBytes(DataTransferer.java:1349)
            at sun.awt.datatransfer.ClipboardTransferable$DataFactory.getTransferData(ClipboardTransferable.java:53)
            at sun.awt.datatransfer.ClipboardTransferable.getTransferData(ClipboardTransferable.java:152)
            at gui.transferHandler.ImportTransferHandler.importData(ImportTransferHandler.java:63)
            at javax.swing.TransferHandler.importData(TransferHandler.java:745)
            at javax.swing.TransferHandler$TransferAction.actionPerformed(TransferHandler.java:1655)
            at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
            at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
            at javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
            at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
            at java.awt.Component.processEvent(Component.java:5818)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4413)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4243)
            at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
            at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
            at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
            at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
            at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
            at java.awt.Component.dispatchEventImpl(Component.java:4285)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Window.dispatchEventImpl(Window.java:2440)
            at java.awt.Component.dispatchEvent(Component.java:4243)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    si vous avez des conseils, je suis preneur

  2. #2
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    quelques avancements :
    dans ma méthode importData, j'ai modifié mon code, au début je faisais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TransferableList transfer = (TransferableList) (t.getTransferData)(t.getTransferDataFlavors()[0]));
    pour récupérer mon objet transféré (TransferableList est une classe que j'ai créé pour pouvoir transférer plusieurs éléments en même temps). je faisait comme ça par ce que mon objet était toujours en première position ^^
    maintenant, je fait plus "propre', je récupère l'objet qui correspond à ma classe TransferableListe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataFlavor df = new DataFlavor(TransferableList.class, TransferableList.class.getName());
    TransferableList transfer = (TransferableList)t.getTransferData(df);
    et du coup, l'exception levée est toute autre :
    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
    java.awt.datatransfer.UnsupportedFlavorException: beans.TransferableList
            at sun.awt.datatransfer.ClipboardTransferable.getTransferData(ClipboardTransferable.java:143)
            at gui.transferHandler.ImportTransferHandler.importData(ImportTransferHandler.java:67)
            at javax.swing.TransferHandler.importData(TransferHandler.java:745)
            at javax.swing.TransferHandler$TransferAction.actionPerformed(TransferHandler.java:1655)
            at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
            at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
            at javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
            at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
            at java.awt.Component.processEvent(Component.java:5818)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4413)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4243)
            at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
            at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
            at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
            at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
            at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
            at java.awt.Component.dispatchEventImpl(Component.java:4285)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Window.dispatchEventImpl(Window.java:2440)
            at java.awt.Component.dispatchEvent(Component.java:4243)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    pourtant, ma méthode createTransferable renvoie bien un objet TransferableList. ce qu'il trouve lui, c'est uniquement des objets de type ClipBoardTransferable (une classe bizarre qui fait partie du code de Java, il parait qu'il est déconseillé de l'utiliser directement)
    des idées ?

  3. #3
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    j'ai trouvé un moyen de contourner le problème, ce n'est pas très propre, mais ça fonctionne bien, de toute façon, je veux pas (pour le moment) partagé le clipboard avec le système.
    voici ma solution :
    je crée un clipboard static, appelons le monClipBoard, je modifie la fonction qui permet d'enregistrer les donnée dans le clipboard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        @Override
        public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
            super.exportToClipboard(comp, monClipBoard, action);
        }
    et puis je gère différemment l'événement de recopie selon si c'est un drop ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (transferSupport.isDrop()) {
        transfer = (TransferableList) transferSupport.getTransferable().getTransferData(flavor);
    }else{
        transfer = (TransferableList) monClipBoard.getContents(null);
    }
    c'était la dernière chose à rajouter dans mon appli, mais si qq1 a une meilleure idée, je suis preneur, au pire, je recompilerais et je changerais le bon jar dans le serveur d'applications ^^

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

Discussions similaires

  1. copy/paste dans un composant text avec html
    Par xixi31 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 05/01/2009, 16h43
  2. Réponses: 13
    Dernier message: 10/11/2006, 09h24
  3. [VBA-E] Probleme avec l'activate d'un classeur ouvert pour un copy paste
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/08/2006, 22h31
  4. [VBA-E] Probleme COPY PASTE d'une feuille à une autre
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/07/2006, 17h56
  5. [VBA] word automation copy/paste
    Par Lysis dans le forum VBA Word
    Réponses: 2
    Dernier message: 16/09/2005, 12h45

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