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