Avatar billede backupmand Nybegynder
16. marts 2005 - 14:02 Der er 2 kommentarer

Drag and drop fra native til JVM

Kan ikke forstå, at min DnD applikation ikke kan DnD'e fra Windows desktoppen, når det nu går så fint fra internet explorer (er dette ikke en native applikation?). Nogle der kan fortælle mig lidt mere på dette punkt?

Jeg har en klasse, ImageSelection der extender Transferable
Den ser således ud:

public class ImageSelection extends TransferHandler {

  private static final DataFlavor flavors[] =
      {DataFlavor.imageFlavor};

  public int getSourceActions(JComponent c) {
    return TransferHandler.COPY;
  }

  public boolean canImport(
      JComponent comp, DataFlavor flavor[]) {
      /* if (!(comp instanceof JLabel)) {
          return false;
        }*/
    for (int i=0, n=flavor.length; i<n; i++) {
      for (int j=0, m=flavors.length; j<m; j++) {
        if (flavor[i].equals(flavors[j])) {
          return true;
        }
      }
    }
    return false;
  }


  public Transferable createTransferable(JComponent comp) {
         
    if (comp instanceof JLabel) {
      JLabel label = (JLabel)comp;
      Icon icon = label.getIcon();
      if (icon instanceof ImageIcon) {
        final Image image=((ImageIcon)icon).getImage();
        final JLabel source=label;
        Transferable transferable=new Transferable() {
          public Object getTransferData(
              DataFlavor flavor) {
            if (isDataFlavorSupported(flavor)) {
                return image;
            }
            return null;
          }

          public DataFlavor[] getTransferDataFlavors() {
            return flavors;
          }

          public boolean isDataFlavorSupported(
              DataFlavor flavor) {
            return flavor.equals(
                DataFlavor.imageFlavor);
          }
        };
        return transferable;
      }
    }
    return null;
  }

  public boolean importData(
      JComponent comp, Transferable t) {
    System.out.println("import data");
      if (comp instanceof JLabel) {
      JLabel label = (JLabel)comp;
      if (t.isDataFlavorSupported(flavors[0])) {
        try {
          Image image=(Image)t.getTransferData(flavors[0]);
          ImageIcon icon = new ImageIcon(image);
          label.setIcon(icon);
          return true;
        } catch (UnsupportedFlavorException ignored) {
        } catch (IOException ignored) {
        }
      }
    }
    return false;
  }
}
Avatar billede backupmand Nybegynder
16. marts 2005 - 14:40 #1
Har fundet ud af, at canImport returnerer false og denne metode bærer noget af skylden.
Avatar billede backupmand Nybegynder
16. marts 2005 - 17:35 #2
Har yderligere fundet ud af, at det er muligt man skal sætte en anden type TransferHandler, eller udvide transferhandleren til at kunne modtage den MIME type som native systemer benytter sig af.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester