[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:
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:
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:
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