在這篇文章中,我們要演示一個簡單的DnD實作,在主要Swing畫面上放置一個JTextArea,當我們在Windows下把一個或多個檔案用滑鼠圈選移到JTextArea後,JTextArea裡會顯示所移上去的檔案路徑列表。
程式非常簡單,首先我們可以建立一個Java Swing的專案(例如使用NetBeans),命名為 "DragAndDropTest"。並在上面放一個JTextArea,我們把它命名為 "dragAndDropJTextArea"。
接著在DragAndDropTest的建構子中加上如下程式碼即可:
public DragAndDropTest() { //產生各元件 initComponents(); //為dragAndDropJTextArea設置DropTarget,其用來接收DropTargetDropEvent, //可從DropTargetDropEvent取得Transferable物件,即被包裝的拖曳物件。 dragAndDropJTextArea.setDropTarget(new DropTarget() { public synchronized void drop(DropTargetDropEvent evt) { try { //設置可接受的拖曳類型 //如果拖曳物件可支援檔案列表格式(javaFileListFlavor) if (evt.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { //接受拖曳 evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); //得到Transferable物件,並將其轉成檔案列表格式(javaFileListFlavor), //轉型成List<File> List<File> droppedFiles = (List<File>) evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor); //清空dragAndDropJTestArea的內容 dragAndDropJTextArea.setText(""); //將拖曳的檔案以檔案列表的方式顯示在dragAndDropJTestArea中 //字顏色為黑色 dragAndDropJTextArea.setForeground(Color.BLACK); for (File file : droppedFiles) { //顯示檔案列表 dragAndDropJTextArea.append(file.getPath() + "\n"); } } else { //若拖曳的物件不能支持檔案列表格式, //拒絕Drop evt.rejectDrop(); //顯示錯誤訊息,字顏色為紅色 dragAndDropJTextArea.setText("錯誤:拖曳類型不支援檔案列表格式!"); dragAndDropJTextArea.setForeground(Color.red); } } catch (Exception ex) { ex.printStackTrace(); } } }); }
最後試試看結果:
- 如果拖曳的是一般檔案,即可在JTextArea中顯示檔案列表,如下所示:
- 如果拖曳的是不可轉成檔案列表格式的物件,則在JTextArea中會顯示錯誤訊息:
最後附上源始碼下載:
DnDTest.7z
參考資料:
沒有留言 :
張貼留言