1
我有一个JEditorPane并重写了默认的拖动处理程序。在这个过程中,我删除了Text的所有默认拖放行为。Java通过DropTargetListener拖放文本
我希望用户能够从Web浏览器或其他任何地方将文本拖入控件中,然后对其执行一些操作。以下是我到目前为止的代码。 ,文件拖放工作正常,但是如果我把文本转换成它(说从网站)我得到java.lang.ClassCastException: java.io.StringReader cannot be cast to java.io.InputStream
如果我改变了一个String的读者,我得到java.lang.ClassCastException: sun.awt.datatransfer.DataTransferer$ReencodingInputStream cannot be cast to 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
}
}
我还是不明白,我怎么能融入我的代码,这上面它由解析文件以及文本拖到控制 – jax