我有一个JEditorPane,并覆盖了默认的拖动处理程序。在这个过程中,我删除了文本的所有默认拖放行为。
我希望用户能够将文本从web浏览器或其他任何东西拖动到控件中,然后对其执行一些操作。下面是我到目前为止拥有的代码。文件拖放工作正常,但是,如果我将文本拖放到其中(例如从网站),我将获得java.lang.ClassCastException: java.io.StringReader cannot be cast to java.io.InputStream如果我将其更改为字符串阅读器,我将获得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
}
}发布于 2011-09-05 16:57:10
您是否实现了支持PlainText或String的Transferable?
例如,下面的可转移代码可能会很有用:
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));
}https://stackoverflow.com/questions/7305628
复制相似问题