Drag and Drop

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe ein Problem mit Drag and Drop:

So sieht mein Code aus:

Code:
File fi;
			 JTextArea text=new JTextArea();

	    DropTargetListener dropTargetListener = new DropTargetListener() 
	    {

	    	
	         public void dragEnter(DropTargetDragEvent e) {}

	         public void dragExit(DropTargetEvent e) {}

	         public void dragOver(DropTargetDragEvent e) {}

	         public void drop(DropTargetDropEvent e) {
	           try
	           {
	        	   
	        	   System.out.println(e.getSource());
	        	   
	           } 
	           catch (Throwable t) { t.printStackTrace(); }
	           e.rejectDrop();
	         }
	          
	         public void dropActionChanged(
	                DropTargetDragEvent e) {}
	         
	         
	       };
	       DropTarget dropTarget = new DropTarget(
	         text, dropTargetListener);

Jetzt will ich in File fi das File speichern, das in die TextArea hineingezogen wurde.
Wie geht das?
 
Habe geguckt, steht aber leider nichts über das Ziehen von Dateien (nicht aus JTrees) drin.
Vielleicht gibts das in Java 6 gar nicht...
 
Hallo Gast,
versuch mal dieses Progamm.


Code:
import java.awt.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.dnd.*;
import java.util.*;
import java.awt.datatransfer.*;


public class Main extends JFrame{
JTextArea textArea = new JTextArea();
DropTarget target = new DropTarget(textArea, new DropFile());
//------------------------------------------------------------------------------------------------
  public Main(){
    super("Drop File");

    Container contPane = getContentPane();
    contPane.setLayout(new GridLayout(1,1));
    contPane.add(new JScrollPane(textArea));
    textArea.setDropTarget(target);

  }
//------------------------------------------------------------------------------------------------
  public void clear(){
    textArea.setText("");
  }
//------------------------------------------------------------------------------------------------
  public void append(String s){
    textArea.append(s + "\n");
  }
//------------------------------------------------------------------------------------------------
  public static void main(String args[]){

    Main app = new Main();

    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    app.setSize(500,300);
    app.setLocationRelativeTo(null);
    app.setVisible(true);
  }
//================================================================================================
public class DropFile extends DropTargetAdapter{
//------------------------------------------------------------------------------------------------
  public void drop(DropTargetDropEvent dtde) {
    Transferable transferable = dtde.getTransferable();
    dtde.acceptDrop(DnDConstants.ACTION_COPY);
    clear();

    if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){ // Windows
      try {
        java.util.List<File> list = (java.util.List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
        Vector<File> vector = new Vector<File>();

        for (File file : list) {
          vector.addElement(file);
          append(vector.lastElement().toString());
        }
      }
      catch (UnsupportedFlavorException e) {
        JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
      }
      catch (IOException e) {
        JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
      }
    }
    else{ // KDE
      if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)){
        try{
          String string = (String)transferable.getTransferData(DataFlavor.stringFlavor);
          string = string.substring(0,string.length() -1);
          String[] list = string.split("\n");
          Vector<File> vector = new Vector<File>();
          for(int i = 0;i<list.length; i++){
            vector.addElement(new File(new URI(list[i])));
            append(vector.lastElement().toString());
          }
        }
        catch (UnsupportedFlavorException e) {
          JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
        }
        catch (IOException e) {
          JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
        }
        catch (URISyntaxException e) {
          JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
        }
      }
      else{
        JOptionPane.showMessageDialog(null,"no Supported DataFlavor","Information",JOptionPane.INFORMATION_MESSAGE);
      }
    }
  }
//------------------------------------------------------------------------------------------------
}
//================================================================================================
}


Compiliert mit java version "1.6.0_02". Getestet auf Debian Linux "Etch" mit KDE und Windows Longhorn Vista. Zu Gnome kann ich keine Aussage treffen.

Grüss Max
 
Ok habe das Programm ein bischen umgeschrieben:

Ich will eigentlich nur den text der Datei:

Code:
public class DropFile extends DropTargetAdapter{
		//------------------------------------------------------------------------------------------------
		  public void drop(DropTargetDropEvent dtde) {
		    Transferable transferable = dtde.getTransferable();
		    dtde.acceptDrop(DnDConstants.ACTION_COPY);

		    if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
		    { /*// Windows
		      try {

		        java.util.List<File> list = (java.util.List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
		        Vector<File> vector = new Vector<File>();

		        for (File file : list) {
		          vector.addElement(file);
		          append(vector.lastElement().toString());
		        }
		      }
		      catch (UnsupportedFlavorException e) {
		        JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
		      }
		      catch (IOException e) {
		        JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
		      }*/
		    }
		    else{ // KDE
		      if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)){
		        try{
		          String string = (String)transferable.getTransferData(DataFlavor.stringFlavor);
		          string=string.substring(8);
		          System.out.println(string);
		          
		          File datei=new File(string);
		          
		         System.out.println(getFileText(datei));
		         
		          
		        }
		        catch (UnsupportedFlavorException e) {
		            JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
		          }
		        catch (IOException e) {
		          JOptionPane.showMessageDialog(null,e.getMessage(),"Information",JOptionPane.INFORMATION_MESSAGE);
		        }
		       
		      }
		      else{
		        JOptionPane.showMessageDialog(null,"no Supported DataFlavor","Information",JOptionPane.INFORMATION_MESSAGE);
		      }
		    }
		  }
		//------------------------------------------------------------------------------------------------
		}
	
	public String getFileText(File datei)
	{
		String s="";

		Reader f = null; 
		try 
		{ 
			f = new FileReader( datei.getPath() ); 
			for ( int c; ( c = f.read() ) != -1; ) 
				s+=(char)c; 
		} 
		catch ( IOException e ) { 
			System.err.println( "Error reading file!" ); 
		} 
		finally { 
			try { f.close(); } catch ( Exception e ) { } 
		}
		
		return s;
	}


Den Windows Teil habe ich erstmal weggelassen...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben