Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java通过DropTargetListener拖放文本_Java_Swing - Fatal编程技术网

Java通过DropTargetListener拖放文本

Java通过DropTargetListener拖放文本,java,swing,Java,Swing,我有一个JEditorPane,并已覆盖默认的拖动处理程序。在此过程中,我删除了文本的所有默认拖放行为 我希望用户能够将文本从web浏览器或其他任何东西拖到控件中,然后对其执行一些操作。下面是我到目前为止的代码。文件拖放工作正常,但是,如果我将文本拖放到其中(比如从网站),我会得到java.lang.ClassCastException:java.io.StringReader无法转换为java.io.InputStream,如果我将其更改为字符串读取器,我得到java.lang.ClassCa

我有一个JEditorPane,并已覆盖默认的拖动处理程序。在此过程中,我删除了文本的所有默认拖放行为

我希望用户能够将文本从web浏览器或其他任何东西拖到控件中,然后对其执行一些操作。下面是我到目前为止的代码。文件拖放工作正常,但是,如果我将文本拖放到其中(比如从网站),我会得到
java.lang.ClassCastException:java.io.StringReader无法转换为java.io.InputStream
,如果我将其更改为字符串读取器,我得到
java.lang.ClassCastException:sun.awt.datatransfer.datatransfer$ReencodingInputStream不能转换为java.io.StringReader

private class SpoolDragDroplistener implements DropTargetListener {

    public void drop(DropTargetDropEvent event) {
        // Accept copy drops
        event.acceptDrop(DnDConstants.ACTION_COPY);

        // Get the transfer which can provide the dropped item data
        Transferable transferable = event.getTransferable();

        // Get the data formats of the dropped item
        DataFlavor[] flavors = transferable.getTransferDataFlavors();

        // Loop through the flavors
        for (DataFlavor flavor : flavors) {
            try {
                // If the drop items are files
                if (flavor.isFlavorJavaFileListType()) {

                    // Get all of the dropped files
                    List<File> files = (List<File>) transferable
                            .getTransferData(flavor);

                    // Loop them through
                    for (File file : files) {
                        // Print out the file path
                        // System.out.println("File path is '" +
                        // file.getPath() + "'.");
                        //File xmlFormatFile = (File)cboXmlFiles.getSelectedItem();
                        String input = FileIO.getFileContents(file);
                        parseContents(input);

                        // only support one file for now
                        break;
                    }

                    //event.dropComplete(true);


                } else if(flavor.isRepresentationClassInputStream()) {
                    //StringReader isr = (StringReader)transferable.getTransferData(flavor);
                         /******* NOT WORKING *******/
                    InputStreamReader isr = new InputStreamReader(((InputStream)transferable.getTransferData(flavor)),"UTF-8");
                    //InputStream  is = (InputStream)transferable.getTransferData(flavor);
                    //String theString = new Scanner(is).useDelimiter("\\A").next();
                    //is.close();

                    StringBuilder sb = new StringBuilder();
                    int c=-1;
                    while( (c=isr.read()) != -1) {
                        sb.append((char)c);
                    }

                    parseContents(sb.toString());

                }

            } catch (Exception e) {
                // Print out the error stack

                editor.setText("ERROR: "+e.getMessage());
                e.printStackTrace();
            }
        }


        // Inform that the drop is complete
        event.dropComplete(true);
    }

    public void dropActionChanged(DropTargetDragEvent dtde) {
        // TODO Auto-generated method stub

    }

    public void dragEnter(DropTargetDragEvent dtde) {
        // TODO Auto-generated method stub

    }

    public void dragExit(DropTargetEvent dte) {
        // TODO Auto-generated method stub

    }

    public void dragOver(DropTargetDragEvent dtde) {
        // TODO Auto-generated method stub

    }

}
私有类SpoolDragDroplistener实现DropTargetListener{
公共作废删除(DropTargetDropEvent事件){
//接受副本删除
事件.acceptDrop(DnDConstants.ACTION\u副本);
//获取可以提供已删除项目数据的传输
可转移=event.getTransferable();
//获取已删除项的数据格式
DataFlavor[]flavors=可转移。getTransferDataFlavors();
//循环浏览各种口味
用于(数据风味:风味){
试一试{
//如果放置的项目是文件
if(flavor.isFlavorJavaFileListType()){
//获取所有删除的文件
列表文件=(列表)可转移
.getTransferData(风味);
//把它们循环一遍
用于(文件:文件){
//打印出文件路径
//System.out.println(“文件路径为”+
//file.getPath()+“.”;
//文件xmlFormatFile=(文件)cboXmlFiles.getSelectedItem();
字符串输入=FileIO.getFileContents(文件);
解析内容(输入);
//目前只支持一个文件
打破
}
//事件.dropComplete(true);
}else if(flavor.isRepresentationClassInputStream()){
//StringReader isr=(StringReader)transferable.getTransferData(flavor);
/*******不起作用*******/
InputStreamReader isr=新的InputStreamReader(((InputStream)transferable.getTransferData(flavor)),“UTF-8”);
//InputStream是=(InputStream)可转移的。getTransferData(flavor);
//字符串字符串=新扫描仪(is)。使用分隔符(\\A”).next();
//is.close();
StringBuilder sb=新的StringBuilder();
int c=-1;
而((c=isr.read())!=-1){
sb.附加((char)c);
}
解析内容(sb.toString());
}
}捕获(例外e){
//打印出错误堆栈
setText(“错误:+e.getMessage());
e、 printStackTrace();
}
}
//通知投递已完成
事件.dropComplete(true);
}
公共无效dropActionChanged(DropTargetDragEvent dtde){
//TODO自动生成的方法存根
}
公共无效dragEnter(DropTargetDragEvent dtde){
//TODO自动生成的方法存根
}
公共无效dragExit(DropTargetEvent dte){
//TODO自动生成的方法存根
}
公共无效dragOver(DropTargetDragEvent dtde){
//TODO自动生成的方法存根
}
}

您是否实现了支持纯文本或字符串的可转换文件

例如,以下内容可能有用:

  public class StringTransferable implements Transferable, ClipboardOwner {
  public static final DataFlavor plainTextFlavor = DataFlavor.plainTextFlavor;
  public static final DataFlavor localStringFlavor = DataFlavor.stringFlavor;

  public static final DataFlavor[] flavors = {
    StringTransferable.plainTextFlavor,
    StringTransferable.localStringFlavor
  };

  private static final List flavorList = Arrays.asList( flavors );

  public synchronized DataFlavor[] getTransferDataFlavors() {
    return flavors;
  }
  public boolean isDataFlavorSupported( DataFlavor flavor ) {
    return (flavorList.contains(flavor));
  }

您是否实现了支持纯文本或字符串的可转移程序

例如,以下内容可能有用:

  public class StringTransferable implements Transferable, ClipboardOwner {
  public static final DataFlavor plainTextFlavor = DataFlavor.plainTextFlavor;
  public static final DataFlavor localStringFlavor = DataFlavor.stringFlavor;

  public static final DataFlavor[] flavors = {
    StringTransferable.plainTextFlavor,
    StringTransferable.localStringFlavor
  };

  private static final List flavorList = Arrays.asList( flavors );

  public synchronized DataFlavor[] getTransferDataFlavors() {
    return flavors;
  }
  public boolean isDataFlavorSupported( DataFlavor flavor ) {
    return (flavorList.contains(flavor));
  }

我仍然不明白如何将其放入上面的代码中,该代码包括解析文件以及拖到控件上的文本。我仍然不明白如何将其放入上面的代码中,该代码包括解析文件以及拖到控件上的文本