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

Agents de placement/Fenêtres Java Discussion :

Coller une image (Ctrl+V) dans un jTextPane / jEditorPane [FAQ]


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre éprouvé 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
    Points : 934
    Points
    934
    Par défaut Coller une image (Ctrl+V) dans un jTextPane / jEditorPane
    Salut à tous !

    On peut coller du texte dans un jTextPane avec les touches Ctrl+V du clavier...
    est-il possible de coller du texte formaté (couleur / fonte) ?
    comment coller de la même façon une icône, une image, autre chose ?
    (faut-il choisir un autre composant ?)

    ...et que l'utilisateur du programme puisse le faire très facilement...

    merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 859
    Points
    22 859
    Billets dans le blog
    51
    Par défaut
    Il te faut, probablement, mettre en place un TransfertHandler sur ce composant qui soit capable de prendre en charge plus de saveurs (DataFlavor) que celui par defaut et de faire ce qu'il faut lorsqu'on receptionne un tel objet (qui peut tout aussi bien provenir d'un autre composant Java que "l'exterieur" -c-a-d une application native au system-). Par contre cela veut aussi dire bien sur que dans le cas du transfert d'objet externes il faudra s'occuper egalement de la conversion du type externe (type MIME ?) en une classe ou un type de donnee surpportee par ton programme. Au besoin il faudra peut-etre creer un Transferable.

    Bref pour essayer, met un TransfertHandler customise sur un composant quelconque (occupe-toi uniquement de la partie reception -importData()-, ignore la partie emission) et regarde ce que tu choppes comme DataFlavor si tu essaies de faire du DnD dessus. Je soupconne que si tu essaies de larger un fichier ico tu vas recevoir DataFlavor.javaFileListFlavor ou DataFlavor.textFlavor et si tu essaies de larger une bitmap depuis un logiciel quelconque de dessin ou WYIWYG, tu vas recevoir DataFlavor.imageFlavor. Dans les deux premiers cas, ben il faut aller charger l'image a partir du fichier, dans le second tu devrais avoir directement l'image en memoire. Dans tous les cas la donnee (chaine de texte ou Image) devrais etre recuperable sur le presse-papier (ClipBoard).

    Le didacticiel de Sun sur le dnd est ici (en anglais).

    PS : c'est l'application/le composant qui est la source de l'export qui envoie une liste de differentes saveurs (typiquement de la plus riche a la plus pauvre) sous laquelle la donnee est dispo. Ensuite l'application/le composant destination selectionne parmis ces saveurs une qu'il supporte et demander la donnee sous cette forme.

    Par exemple lors du DnD d'une sequence video, la source peut indiquer que le cette sequence est exportable sous les saveurs suivantes :
    - sequence video.
    - image de la frame actuelle.
    - nom du fichier.
    Tandis que l'application destination ne supporte que la saveur image et n'est donc interressee que par la seconde saveur. Elle indique donc qu'elle peut supporter cette saveur.
    La source (dans le cas d'un dnd inter-java, cette source est le Transferable cree par le TransfertHandler de l'objet source) va alors preparer sa donnee sous forme d'image et l'exporter. La destination va alors recuperer cette image.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre éprouvé 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
    Points : 934
    Points
    934
    Par défaut
    Merci pour la prompte réponse !
    (et détaillée en plus )

    Je regarde tout ça...
    va y avoir du sport !

    à +

  4. #4
    Membre éprouvé 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
    Points : 934
    Points
    934
    Par défaut
    Salut !

    Je nage dans la doc depuis deux jours sans trouver comment faire pour que mon textPane accepte DataFlavor.imageFlavor... et donc que je puisse lui dropper une image.

    Si quelqu'un avait un bout de code pour le faire ça me rendrait service (et à d'autres aussi pour sûr).
    merci d'avance !

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 859
    Points
    22 859
    Billets dans le blog
    51
    Par défaut
    Clair qu'on manque d'exemples sur le sujet. Bon j'ai remis les mains dans le cambouis car je vais devoir y passer sous peu egalement. C'est pas super-propre et il y a probablement des tonnes de trucs a ameliorer.

    Grosso-modo, dans mon exemple, tu as :
    - 2 JPanel capables de dessiner des Image.
    - 1 JPanel avec un TransferHandler pour emettre, la source. Par defaut une Image est affichee dedans.
    - 1 JPanel avec un TransferHandler pour recevoir, la destination. Par defaut aucune Image n'est affichee dedans.

    Source :
    - Sur cette source j'ai mis un MouseMotionListener pour demarrer le drag car par defaut le JPanel est incapable de faire du DnD. Normalement ca ne devrait pas etre necessaire avec un composant de haut-niveau comme ceux que tu veux manipuler.
    - Je lui ais egalement mis un MouseListener pour lui donner le focus.

    Quand le DnD demarre les action supportees sont checkees via un appel a getSourceActions() (ici uniquement TransferHandler.COPY), puis un Transferable est cree qui contient une reference sur l'Image.

    Lorsque la methode getTransferData() de ce Transferable sera appellee plus tard (par une destination quelconque), il pourra exporter au choix directement une Image ou une String ("Sorry we can only export an image." disant qu'il n'exporte que des images).

    En partant de cette source, je peux faire du DnD sur mon image et aller la larguer sur :
    - le panneau destination (voir description ci-apres).
    - n'importe quel application qui supporte une de ses saveurs. Par exemple :
    -- Paint, Paint.NET, Inkscape se semblent pas supporter l'import.
    -- Word, PowerPoint, Outlook, etc... ne supportent que l'import de la chaine de texte "Sorry we can only export an image."
    -- Paint Shop Pro X support l'import de l'Image mais sans transparence (fond noir).

    Destination :
    - je lui ais rajoute une action paste (CTRL+v) dans son ActionMap et son InputMap.
    - Je lui ais mis un MouseListener pour lui donner le focus. C'est utile si on veut utiliser l'action paste (CTRL+v) dessus.

    En cas de DnD, regulierement la methode canImport() du TransferHandler destination est appellee. Si on lache le bouton de la souris et si cette methode a retourne true, la methode importData() est finallement appellee.

    - Si la saveur est un DataFlavor.imageFlavor, on prend l'Image et on l'affiche dans le composant.
    - Si la saveur est un DataFlavor.javaFileListFlavor, on prend le premier fichier et s'il existe on essaie de le charger sous forme d'Image et on l'affiche dans le composant en cas de reussite.
    - Si la saveur est un DataFlavor.stringFlavor, on considere que cette chaine est le chemin vers un fichier et s'il existe on essaie de le charger sous forme d'Image et on l'affiche dans le composant en cas de reussite.

    Si on fait CTRL+v (apres avoir clique dans le panneau pour lui donner le focus), l'action paste va chercher le Transferable dans le ClipBoard et utiliser le TransferHandler pour coller ce qu'il y a dedans dans le composant.

    Grace a cette destination, je peux :
    - recevoir l'Image de la source via un DnD a la souris.
    - recevoir un fichier depuis l'Explorateur Windows.
    - rien depuis Inkscape.
    - un truc bizarre tout noir en faisant du DnD depuis Word, Outlook, ... etrangement DataFlavor.imageFlavor n'est absolument pas retourne lors des tests sur canImport() (en fait Word, Outlook, ... renvoie :
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.Reader]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.lang.String]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.CharBuffer]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[C]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=UTF-16]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=UTF-16]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=UTF-16]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=UTF-8]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=UTF-8]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=UTF-8]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=UTF-16BE]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=UTF-16BE]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=UTF-16BE]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=UTF-16LE]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=UTF-16LE]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=UTF-16LE]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=ISO-8859-1]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=ISO-8859-1]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=ISO-8859-1]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=windows-1252]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=windows-1252]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=windows-1252]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.io.InputStream;charset=US-ASCII]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=java.nio.ByteBuffer;charset=US-ASCII]
    java.awt.datatransfer.DataFlavor[mimetype=text/html;representationclass=[B;charset=US-ASCII]
    java.awt.datatransfer.DataFlavor[mimetype=text/rtf;representationclass=java.io.InputStream]
    java.awt.datatransfer.DataFlavor[mimetype=text/rtf;representationclass=java.nio.ByteBuffer]
    java.awt.datatransfer.DataFlavor[mimetype=text/rtf;representationclass=[B]
    Comme le programme accepte DataFlavor.stringFavor (c'est la 2nde dans la liste fournie par Word, Outlook,...), il accepte l'import mais apres bizarrement le Transferable cree par java accepte DataFlavor.imageFlavor ce qui donne une image complement invalide (rectangle noir)... Ah oui et Word, Outlook, ... fait un couper et donc supprime l'image du document apres le DnD.
    bref pas au point
    - n faisant CTRL+v, recevoir une Image mais pas forcement a la bonne taille si la source vient de Word, Outlook,... (toujours pas au point ) et qu'elle a ete copiee dans le presse-papier depuis son application hote.
    - en faisant CTRL+v, recevoir la selection de Paint, Paint .NET, Paint Shop Pro X, etc une fois celle-ci copiee dans le presse-papier depuis son application hote.

    Ce que je remarque :
    - getVisualRepresentation() ne semble toujours pas fonctionner (ca ne marchait deja pas dans Java 1.4 ou alors c'est moi qui m'y prend tres mal).

    Ce qu'on peut faire apres :
    - Rajouter une action copy sur la source pour coller l'image dans le ClipBoard (soit directement soit en appelant la method du TransferHandler qui initialise le DnD).
    - Implementer l'action TransferHandler.MOVE sur la source. Dans le cas de cette action, le TransferHandler de la source doit enlever son image (la mettre a null dans le JPanel source) lorsque exportDone() est appellee apres que la destination ait recut l'image.
    - Dans la source, detecter la location de l'export pour n'exporter que le stricte necessaire (evidement l'exemple n'est pas assez complexe pour cela).
    - Dans la destination, detecter la location de l'import pour correctement placer la donnee sur l'ecran/dans le document (meme reflexion).
    - Faire la meme chose avec JTextPane et JEditorPane
    - Fusionner la source et la destination avec un seul TransferHandler mais bien sur la tout de suite c'est moins facile a comprendre pour le debutant .


    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
     
    package test;
     
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsEnvironment;
    import java.awt.Insets;
    import java.awt.LinearGradientPaint;
    import java.awt.RenderingHints;
    import java.awt.Toolkit;
    import java.awt.Transparency;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.awt.event.ActionEvent;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import javax.imageio.ImageIO;
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.ActionMap;
    import javax.swing.BoxLayout;
    import javax.swing.Icon;
    import javax.swing.InputMap;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTree;
    import javax.swing.KeyStroke;
    import javax.swing.SwingUtilities;
    import javax.swing.TransferHandler;
    import javax.swing.border.TitledBorder;
    import javax.swing.event.MouseInputAdapter;
    import javax.swing.event.MouseInputListener;
     
    /**
     *
     * @author fabriceb
     */
    public class TestPanel extends JPanel {
     
      public static final String IMAGE_PROPERTY = "image";
     
      public TestPanel() {
        this(null);
      }
     
      public TestPanel(BufferedImage image) {
        super();
        setFocusable(true);
        setImage(image);
      }
     
      public BufferedImage getImage() {
        return (BufferedImage) getClientProperty(IMAGE_PROPERTY);
      }
     
      public void setImage(BufferedImage image) {
        putClientProperty(IMAGE_PROPERTY, image);
        repaint();
      }
     
      @Override
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        BufferedImage image = getImage();
        Dimension size = getSize();
        Insets insets = getInsets();
        int width = size.width - (insets.left + insets.right);
        int height = size.height - (insets.top + insets.bottom);
        if (image != null && width > 0 && height > 0) {
          Graphics2D g2d = (Graphics2D) g.create(insets.left, insets.top, width, height);
          try {
            g.drawImage(image, (width - image.getWidth()) / 2, (height - image.getHeight()) / 2, null);
          }
          finally {
            g2d.dispose();
          }
        }
      }
     
      private static class ImageTransferable implements Transferable {
     
        BufferedImage image;
     
        public ImageTransferable(BufferedImage image) {
          this.image = image;
        }
     
        public DataFlavor[] getTransferDataFlavors() {
          return new DataFlavor[]{DataFlavor.imageFlavor, DataFlavor.stringFlavor};
        }
     
        public boolean isDataFlavorSupported(DataFlavor flavor) {
          boolean result = false;
          for (DataFlavor f : getTransferDataFlavors()) {
            result = (f.equals(flavor));
            if (result) {
              break;
            }
          }
          return result;
        }
     
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
          if (flavor == DataFlavor.imageFlavor) {
            return image;
          }
          else if (flavor == DataFlavor.stringFlavor) {
            return "Sorry we can only export an image.";
          }
          throw new UnsupportedFlavorException(flavor);
        }
      }
     
      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
     
          public void run() {
            // Creates test image.
            GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
            BufferedImage image = gc.createCompatibleImage(100, 100, Transparency.TRANSLUCENT);
            Graphics2D g2d = image.createGraphics();
            try {
              g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
              g2d.setPaint(new LinearGradientPaint(0, 0, 100, 100, new float[]{0f, 1f}, new Color[]{Color.CYAN, Color.BLUE}));
              g2d.fillOval(0, 0, 100, 100);
            }
            finally {
              g2d.dispose();
            }
            // Creates source panel.
            final TestPanel test1 = new TestPanel(image);
            MouseInputListener m1Listener = new MouseInputAdapter() {
     
              @Override
              public void mousePressed(MouseEvent event) {
                System.out.println("Source: mousePressed()");
                test1.requestFocus();
     
     
              }
     
              @Override
              public void mouseDragged(MouseEvent event) {
                System.out.println("Source: mouseDragged()");
                // System.out.println("Mouse dragged " + event.getX() + ", " + event.getY());
                JComponent component = (JComponent) event.getSource();
                // Tell the transfer handler to initiate the drag.
                TransferHandler handler = component.getTransferHandler();
                handler.exportAsDrag(component, event, TransferHandler.COPY);
              }
            };
            // We need that because by default JPanel cannot drag.
            test1.addMouseListener(m1Listener);
            test1.addMouseMotionListener(m1Listener);
            // Install source transfer handler.
            test1.setTransferHandler(new TransferHandler() {
     
              /** {@inheritDoc}
               */
              @Override
              public int getSourceActions(JComponent component) {
                System.out.println("Source: getSourceActions()");
                return COPY;
              }
     
              @Override
              public Transferable createTransferable(JComponent c) {
                System.out.println("Source: createTransferable()");
                TestPanel source = (TestPanel) c;
                Transferable result = new ImageTransferable(source.getImage());
                return result;
              }
     
              @Override
              public Icon getVisualRepresentation(Transferable t) {
                System.out.println("Source: getVisualRepresentation()");
                if (t instanceof ImageTransferable) {
                  ImageTransferable it = (ImageTransferable) t;
                  final BufferedImage image = it.image;
                  return new Icon() {
     
                    public void paintIcon(Component c, Graphics g, int x, int y) {
                      g.drawImage(image, x, y, getIconWidth(), getIconHeight(), null);
                    }
     
                    public int getIconWidth() {
                      return 32;
                    }
     
                    public int getIconHeight() {
                      return 32;
                    }
                  };
                }
                else {
                  return super.getVisualRepresentation(t);
                }
              }
            });
            test1.setBorder(new TitledBorder("Source"));
            // Creates destination panel.
            final TestPanel test2 = new TestPanel();
            test2.setBorder(new TitledBorder("Destination"));
            MouseInputListener m2Listener = new MouseInputAdapter() {
     
              @Override
              public void mousePressed(MouseEvent event) {
                System.out.println("Destination: mousePressed()");
                test2.requestFocus();
              }
            };
            test2.addMouseListener(m2Listener);
            test2.addMouseMotionListener(m2Listener);
            InputMap inputMap = test2.getInputMap();
            ActionMap actionMap = test2.getActionMap();
            Action pasteAction = new AbstractAction("Paste", null) {
     
              public void actionPerformed(ActionEvent event) {
                System.out.println("Destination: actionPerformed()");
                Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(test2);
                test2.getTransferHandler().importData(test2, t);
              }
            };
            String key = (String) pasteAction.getValue(Action.NAME);
            KeyStroke keystroke = KeyStroke.getKeyStroke("control V");
            pasteAction.putValue(Action.ACCELERATOR_KEY, keystroke);
            // Install into key map.
            inputMap.put(keystroke, key);
            // Install into action map.
            actionMap.put(key, pasteAction);
            // Install destination transfer handler.
            test2.setTransferHandler(new TransferHandler() {
     
              @Override
              public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
                System.out.println("Destination: canImport()");
                System.out.print("Got flavors: ");
                for (DataFlavor flavor : transferFlavors) {
                  System.out.print(flavor + "\t");
                }
                System.out.println();
                boolean result = false;
                for (DataFlavor flavor : transferFlavors) {
                  result = (DataFlavor.imageFlavor.equals(flavor) || DataFlavor.javaFileListFlavor.equals(flavor) || DataFlavor.stringFlavor.equals(flavor));
                  System.out.println((result ? "Accepted flavor : " : " Rejected flavor") + flavor);
                  if (result) {
                    break;
                  }
                }
                return result;
              }
     
              @Override
              public boolean importData(JComponent comp, Transferable t) {
                System.out.println("Destination: importData()");
                try {
                  TestPanel destination = (TestPanel) comp;
                  if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
                    System.out.println("DataFlavor.imageFlavor");
                    BufferedImage image = (BufferedImage) t.getTransferData(DataFlavor.imageFlavor);
                    destination.setImage(image);
                    return true;
                  }
                  else if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                    System.out.println("DataFlavor.javaFileListFlavor");
                    @SuppressWarnings("unchecked")
                    List<File> files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
                    File file = files.get(0);
                    if (file.exists()) {
                      BufferedImage image = ImageIO.read(file);
                      destination.setImage(image);
                      return true;
                    }
                  }
                  else if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                    System.out.println("DataFlavor.stringFlavor");
                    String path = (String) t.getTransferData(DataFlavor.stringFlavor);
                    File file = new File(path);
                    if (file.exists()) {
                      BufferedImage image = ImageIO.read(file);
                      destination.setImage(image);
                      return true;
                    }
                  }
                }
                catch (Exception ex) {
                  ex.printStackTrace();
                }
                return false;
              }
            });
            // The application frame.
            JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS));
            frame.add(test1);
            frame.add(test2);
            frame.setSize(400, 400);
            frame.setVisible(true);
          }
        });
      }
    }
    Voili-voila
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre éprouvé 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
    Points : 934
    Points
    934
    Par défaut
    Splendide contribution
    sapristi, j'en reste bouche ouverte à tourner mon béret dans mes mains

    que dire maintenant...
    merci, oui. et bravo !

    résolu

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

Discussions similaires

  1. [OL-2003] Coller une image dans un mail
    Par Daejung dans le forum Outlook
    Réponses: 0
    Dernier message: 20/02/2010, 14h39
  2. vs 2008 - coller une image dans un cadre
    Par pascalh4 dans le forum Windows Forms
    Réponses: 34
    Dernier message: 30/09/2009, 10h24
  3. [SP-2007] Copier coller une image dans formulaire
    Par mikedavem dans le forum SharePoint
    Réponses: 3
    Dernier message: 10/04/2009, 11h04
  4. Coller une image dans une cellule
    Par nikko_54 dans le forum Word
    Réponses: 2
    Dernier message: 04/06/2008, 14h40
  5. Réponses: 1
    Dernier message: 26/11/2007, 17h45

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