日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Atitit。DD dragdrop拖拽功能c#.net java swing的对比与实现总结

發(fā)布時間:2023/12/20 C# 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Atitit。DD dragdrop拖拽功能c#.net java swing的对比与实现总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AtititD&D?drag&drop拖拽功能c#.net?java?swing的對比與實現(xiàn)總結(jié)

?

1.?實現(xiàn)一個D&D操作一般包括三個步驟: 1

2.?.net黑頭的拖曳機制.必須有DragEnter事件(單獨寫DragDrop事件是不會具有拖拽功能的) 2

3.?---java黑頭的拖曳..必須有DragEnter事件(單獨寫?Drop事件是不會具有拖拽功能的) 2

4.?代碼 3

5.?參考 5

?

1.?實現(xiàn)一個D&D操作一般包括三個步驟:


?首先實現(xiàn)一個拖拽源,這個拖拽源和相應(yīng)的組件是關(guān)聯(lián)起來的
?第二步實現(xiàn)一個拖拽目標,這個目標用來實現(xiàn)拖拽物的接收
?第三步實現(xiàn)一個數(shù)據(jù)傳輸對象,該對象封裝拖動的數(shù)據(jù)
??_____________________??????????????????????????????????????_____________________
?|?????????????????????|?????????????????????????????????????|????????????????????|???
?|?DragSource?Component|?????????????????????????????????????|DropTarget?Component|
?|_____________________|?????????????????????????????????????|____________________|
???????????????????|??????????????????????????????????????????????|
???????????????????|____________Transferable?Data_________________|
???????????????????
?Transferable?接口實現(xiàn)出的對象能夠保證??DropTarget?Component讀懂拖拽過來的對象中包含的信息
?如果是在同一個虛擬機中實現(xiàn)拖拽的話,DragSource?Component會傳遞一個引用給DropTarget?Component
?但是如果在不同的JVM中或者是在JVM和本地系統(tǒng)之間傳遞數(shù)據(jù)的話我們就必須實現(xiàn)一個Transferable對象來傳遞數(shù)據(jù)
?Transferable中封裝的內(nèi)容存放到DataFlavors,用戶可以通過訪問DataFlavors來獲取數(shù)據(jù)

?

作者::?老哇的爪子?Attilax?艾龍,??EMAIL:1466519819@qq.com

轉(zhuǎn)載請注明來源:?http://blog.csdn.net/attilax

?

?

?

2.?.net黑頭的拖曳機制.必須有DragEnter事件(單獨寫DragDrop事件是不會具有拖拽功能的)

?

思路:?通過DragEnter事件獲得被拖入窗口的“信息”(可以是若干文件,一些文字等等),
在DragDrop事件中對“信息”進行解析。


窗體的AllowDrop屬性必須設(shè)置成true;


且必須有DragEnter事件(單獨寫DragDrop事件是不會具有拖拽功能的)

?private?void?Form1_DragEnter(object?sender,?DragEventArgs?e)
?{
??????????????if?(e.Data.GetDataPresent(DataFormats.FileDrop))
??????????????????e.Effect?=?DragDropEffects.Link;?//重要代碼:表明是鏈接類型的數(shù)據(jù),比如文件路徑
???????????????else?e.Effect?=?DragDropEffects.None;
????}


?????????private?void?Form1_DragDrop(object?sender,?DragEventArgs?e)
?????????{
???????????????string?path?=?((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
?????????????MessageBox.Show(path);??
?????????}

?

3.?---java黑頭的拖曳..必須有DragEnter事件(單獨寫?Drop事件是不會具有拖拽功能的)

?

這個功能AWT也提供了Swing話只是利用了這個,因為這和界面沒什么關(guān)系。

?

?

在JAVA中使用拖拽功能
sun在java2中引入了一些新的方法來幫助實現(xiàn)拖拽功能,這些新的類在java.awt.dnd包中

?JDK1.4開始對Swing的拖放功能做了簡化,不同組件分別提供了拖放源和拖放目標,這里就講用的最多的文本域,他既能拖入文本,也能將文本拖出,非常方便。

但默認這個功能沒有啟用,要手動調(diào)用setDragEnabled方法,使其生效。eg

?

4.?代碼

---form?ini()

?class?SetImgSoftlinkGener?extends?JFrame??implements?Iskin,?DropTargetListener

frame.setDropTarget(?new?DropTarget(frame,??DnDConstants.ACTION_COPY_OR_MOVE,?this,?true)?);

?


@Override

public?void?dragEnter(DropTargetDragEvent?dtde)?{

System.out.println("=====enter?drag?enter?");

?

//?Get?the?type?of?object?being?transferred?and?determine

//?whether?it?is?appropriate.

//?checkTransferType(dtde);

//?Only?accept?a?list?of?files

boolean?acceptableType?=?dtde

.isDataFlavorSupported(DataFlavor.javaFileListFlavor);

?

//?Accept?or?reject?the?drag.

//?acceptOrRejectDrag(dtde);

int?dropAction?=?dtde.getDropAction();

int?sourceActions?=?dtde.getSourceActions();

boolean?acceptedDrag?=?false;

?

//?Reject?if?the?object?being?transferred

//?or?the?operations?available?are?not?acceptable.

if?(!acceptableType

||?(sourceActions?&?DnDConstants.ACTION_COPY_OR_MOVE)?==?0)?{

//?DnDUtils.debugPrintln("Drop?target?rejecting?drag");

dtde.rejectDrag();

}?else?if?((dropAction?&?DnDConstants.ACTION_COPY_OR_MOVE)?==?0)?{

//?Not?offering?copy?or?move?-?suggest?a?copy

//?DnDUtils.debugPrintln("Drop?target?offering?COPY");

dtde.acceptDrag(DnDConstants.ACTION_COPY);

acceptedDrag?=?true;

}?else?{

//?Offering?an?acceptable?operation:?accept

//?DnDUtils.debugPrintln("Drop?target?accepting?drag");

dtde.acceptDrag(dropAction);

acceptedDrag?=?true;

}

?

//?return?acceptedDrag;

?

}

?

?

@Override

public?void?drop(DropTargetDropEvent?dtde)?{

System.out.println("=====enter?drag?drop...?");

//?Check?the?drop?action

if?((dtde.getDropAction()?&?DnDConstants.ACTION_COPY_OR_MOVE)?!=?0)?{

//?Accept?the?drop?and?get?the?transfer?data

dtde.acceptDrop(dtde.getDropAction());

Transferable?transferable?=?dtde.getTransferable();

System.out.println("");

try?{

List<File>?fileList?=?(List)?transferable

.getTransferData(DataFlavor.javaFileListFlavor);

//fileList.getClass().toString();

?

//String?path?=?fileList[0].getPath();

String?path=fileList.get(0).getPath();

MsgBox.setTxt(path);

System.out.println(path);

}?catch?(UnsupportedFlavorException?|?IOException?e)?{

//?TODO?Auto-generated?catch?block

e.printStackTrace();

}

?

//?dtde.dropComplete(result);

?

//?dtde.rejectDrop();

}

?

}

5.?參考

在JAVA中使用拖拽功能?-?gudong2945的專欄?-?博客頻道?-?CSDN.NET.htm

(impt?)swing實現(xiàn)拖拽效果(將本地文件拖拽到程序的文本框中顯示內(nèi)容)?-?java學(xué)習(xí)交流?-?博客頻道?-?CSDN.NET.htm

瘋狂JAVA講義---第十二章:Swing編程(三)拖放功能?-?TERRY的技術(shù)日志?-?博客頻道?-?CSDN.NET.htm

(?有點用?)java的Drag?and?Drop(拖拽)簡單例子_javase吧_百度貼吧.htm?

(簡單?)?Java?Swing?GUI文件拖拽?-?從明白的那一刻,還不晚,啟航。?-?博客頻道?-?CSDN.NET.htm

?

C#.net拖拽實現(xiàn)獲得文件路徑?-?attilax的專欄?-?博客頻道?-?CSDN.NET.htm

WinForm的鼠標拖拽功能(C#)
C#中的拖放操作?-?fumingkui@126的日志?-?網(wǎng)易博客.htm
winform(C#)拖拽實現(xiàn)獲得文件路徑_.NET教程網(wǎng)——簡單專業(yè)的.NET技術(shù)網(wǎng)站.htm

總結(jié)

以上是生活随笔為你收集整理的Atitit。DD dragdrop拖拽功能c#.net java swing的对比与实现总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。