У меня есть JEditorPane и я переопределил обработчик перетаскивания по умолчанию.В процессе я удалил все стандартные функции перетаскивания для Text.
Я хочу, чтобы пользователь мог перетаскивать текст в элемент управления из веб-браузера или чего-либо еще, а затем выполнять над ним некоторые операции.Ниже приведен код, который я до сих пор.Перетаскивание файла работает нормально, однако, если я перетаскиваю в него текст (скажем, с веб-сайта), я получаю java.lang.ClassCastException: java.io.StringReader cannot be cast to java.io.InputStream
, если я изменяю его на String Reader, я получаю 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
}
}