特定擴展名的拖N - 下降文件,我想實現免打擾我的應用程序接受某些擴展(如WRL)的唯一文件。我想光標更改爲拖動光標,如果該文件將被接受,並恢復到正常光標時擴展名錯誤的文件拖動和刪除。對Java的JFrame
我已經從http://docs.oracle.com/javase/tutorial/uiswing/dnd/toplevel.html
,我提出的是在canImport功能
public boolean canImport(TransferHandler.TransferSupport support)
{
if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
{
return false;
}
Transferable t = support.getTransferable();
try
{
java.util.List<File> l = (java.util.List<File>)t.getTransferData(DataFlavor.javaFileListFlavor);
if (l.size() != 1)
{
return false;
}
File f = l.get(0);
String extension = f.getName().substring(f.getName().lastIndexOf("."));
return extension.equalsIgnoreCase(".wrl");
}
catch (UnsupportedFlavorException e)
{
return false;
}
catch (IOException e)
{
return false;
}
}
,當我在不同的文件中拖過這個正確的行爲的變化遵循下面的教程/例子。然而,當我把文件,我得到以下異常
Exception in thread "AWT-EventQueue-0" java.awt.dnd.InvalidDnDOperationException: No drop current
at sun.awt.dnd.SunDropTargetContextPeer.getTransferData(SunDropTargetContextPeer.java:227)
at sun.awt.datatransfer.TransferableProxy.getTransferData(TransferableProxy.java:56)
at java.awt.dnd.DropTargetContext$TransferableProxy.getTransferData(DropTargetContext.java:359)
at appl.TopLevelTransferHandlerDemo$1.canImport(TopLevelTransferHandlerDemo.java:207)
at javax.swing.TransferHandler$DropHandler.drop(TransferHandler.java:1454)
at java.awt.dnd.DropTarget.drop(DropTarget.java:434)
at javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:1193)
at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:519)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:832)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:756)
at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:30)
at java.awt.Component.dispatchEventImpl(Component.java:4487)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4312)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4163)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
任何幫助,不勝感激
歡迎來到我的世界。我認爲你可以做到這一點,直到實際發生下降。我相信會發生這種情況,因爲在下降發生之前,JVM不會創建實際可傳輸的數據對象。 – MadProgrammer 2013-02-26 02:24:36
@MadProgrammer我同意,但我想提供更多的直接反饋給用戶 – Leon 2013-02-26 02:25:39
所以我會,但沒有在轉讓對象實際檢查的數據的能力,沒有什麼更多可以做,直到它的下跌... – MadProgrammer 2013-02-26 02:26:35