Drag and Drop

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?
 
G

Guest

Gast
Habe geguckt, steht aber leider nichts über das Ziehen von Dateien (nicht aus JTrees) drin.
Vielleicht gibts das in Java 6 gar nicht...
 

max60watt

Mitglied
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
 
G

Guest

Gast
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.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Drag & Drop Hilfe Java Basics - Anfänger-Themen 5
DStrohma Grundsätzliche Fragen zu Drag & Drop Java Basics - Anfänger-Themen 1
M Drag & Drop - Interaktion zwischen Java und dem OS Java Basics - Anfänger-Themen 1
B Drag & Drop für Panels Java Basics - Anfänger-Themen 6
B List - Drag&Drop Java Basics - Anfänger-Themen 8
P Input/Output String via Drag & Drop auf jar-Archiv Java Basics - Anfänger-Themen 2
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
U Drag&Drop von Tabelle in Textfeld Java Basics - Anfänger-Themen 3
S Drag and Drop von .txt Dateien in eine Liste Java Basics - Anfänger-Themen 2
M Drag and Drop eines Graphikelements Java Basics - Anfänger-Themen 19
R Drag&Drop mit Parametern Java Basics - Anfänger-Themen 6
B Drag and Drop fähige Trackliste..nurnoch ein kleines Problem Java Basics - Anfänger-Themen 16
O Drag & Drop mit Image? Java Basics - Anfänger-Themen 2
G Drag n' Drop - Probleme mit Transferable Java Basics - Anfänger-Themen 10
T ganzes Object Drag und Drop Java Basics - Anfänger-Themen 19
G Drag and drop Verständnissproblem. Java Basics - Anfänger-Themen 8
N drag and drop mit JList Java Basics - Anfänger-Themen 5
B Drag&Drop mit Swing Java Basics - Anfänger-Themen 17
B Swing: Zeichnen mit Drag and Drop Java Basics - Anfänger-Themen 11
R Drag'n'Drop Box Java Basics - Anfänger-Themen 2
E Cursor Image bei Drag'n'Drop ändern Java Basics - Anfänger-Themen 6
X Gwt DnD, Drag auf Droparea in anderer Klasse? Java Basics - Anfänger-Themen 0
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
S Java und HTML- Drop Down- Mehrfachauswahl Java Basics - Anfänger-Themen 3
D Zwei Drop downs für voneinander abhängige Bundesländer- und Städteauswahl Java Basics - Anfänger-Themen 9
K SWT Drop Box Java Basics - Anfänger-Themen 11
E Adobe Designer Drop Down Feld & If Abfrage Java Basics - Anfänger-Themen 4
M statt drop down menü - buttons Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben