把文件拖入窗体的例子

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

public class DropTest extends JFrame implements DropTargetListener {

  DropTarget dt;

  JTextArea ta;

  public DropTest() {
    super("Drop Test");
    setSize(300, 300);

    getContentPane().add(
        new JLabel("Drop a list from your file chooser here:"),
        BorderLayout.NORTH);
    ta = new JTextArea();
    ta.setBackground(Color.white);
    getContentPane().add(ta, BorderLayout.CENTER);

    // Set up our text area to recieve drops...
    // This class will handle drop events
    dt = new DropTarget(ta, this);
    setVisible(true);
  }

  public void dragEnter(DropTargetDragEvent dtde) {
    System.out.println("Drag Enter");
  }

  public void dragExit(DropTargetEvent dte) {
    System.out.println("Source: " + dte.getSource());
    System.out.println("Drag Exit");
  }

  public void dragOver(DropTargetDragEvent dtde) {
    System.out.println("Drag Over");
  }

  public void dropActionChanged(DropTargetDragEvent dtde) {
    System.out.println("Drop Action Changed");
  }

  public void drop(DropTargetDropEvent dtde) {
    try {
      // Ok, get the dropped object and try to figure out what it is
      Transferable tr = dtde.getTransferable();
      DataFlavor[] flavors = tr.getTransferDataFlavors();
      for (int i = 0; i < flavors.length; i++) {
        System.out.println("Possible flavor: "
            + flavors[i].getMimeType());
        // Check for file lists specifically
        if (flavors[i].isFlavorJavaFileListType()) {
          // Great! Accept copy drops...
          dtde.acceptDrop(DnDConstants.ACTION_COPY);
          ta.setText("Successful file list drop.\n\n");

          // And add the list of file names to our text area
          java.util.List list = (java.util.List) tr
              .getTransferData(flavors[i]);
          for (int j = 0; j < list.size(); j++) {
            ta.append(list.get(j) + "\n");
          }

          // If we made it this far, everything worked.
          dtde.dropComplete(true);
          return;
        }
      }
      // Hmm, the user must not have dropped a file list
      System.out.println("Drop failed: " + dtde);
      dtde.rejectDrop();
    } catch (Exception e) {
      e.printStackTrace();
      dtde.rejectDrop();
    }
  }

  public static void main(String args[]) {
    new DropTest();
  }
}


第二个例子代码:
public class DropTest extends JFrame{
    DropTarget dt;
    JTextArea ta;
    public DropTest(){
        super("Drop Test");
        this.setBounds(300,300,600,400);
        getContentPane().add(new JLabel("Drop a list from your file chooser here:"),BorderLayout.NORTH);
        ta = new JTextArea();
        ta.setBackground(Color.white);
        dt = new DropTarget(ta,new Mylistener());
        JScrollPane jpane = new JScrollPane(ta);
        getContentPane().add(jpane,BorderLayout.CENTER);
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
        setVisible(true);
    }

    class Mylistener extends DropTargetAdapter{
        public void drop(DropTargetDropEvent dtde){
            try{
                // Ok, get the dropped object and try to figure out what it is
                Transferable tr = dtde.getTransferable();
                DataFlavor[] flavors = tr.getTransferDataFlavors();
                for(int i = 0;i < flavors.length;i++){
                    System.out.println("Possible flavor: " + flavors[i].getMimeType());
                    // Check for file lists specifically
                    if(flavors[i].isFlavorJavaFileListType()){
                        // Great! Accept copy drops...
                        dtde.acceptDrop(DnDConstants.ACTION_COPY);
                        ta.setText("Successful file list drop.\n");
                        // And add the list of file names to our text area
                        java.util.List list = (java.util.List) tr.getTransferData(flavors[i]);
                        for(int j = 0;j < list.size();j++){
                            ta.append(list.get(j) + "\n");
                            appendText((File)list.get(j));
                        }
                        // If we made it this far, everything worked.
                        dtde.dropComplete(true);
                        return;
                    }
                }
                // Hmm, the user must not have dropped a file list
                System.out.println("Drop failed: " + dtde);
                dtde.rejectDrop();
            }catch(Exception e){
                e.printStackTrace();
                dtde.rejectDrop();
            }
        }
    }

    private void appendText(File file){
        if(file.getAbsolutePath().lastIndexOf(".txt") != -1){
            BufferedReader br = null;
            InputStreamReader isr = null;
            if(!file.exists()) return;
            String lineStr = null;
            try{
                isr = new FileReader(file);
                br = new BufferedReader(isr);
                while((lineStr = br.readLine()) != null){
                    ta.append(lineStr+"\n");
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                if(br != null) try{
                    br.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String args[]){
        new DropTest();
    }
}






我的例子截图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值