有没有办法监听swt的browser上面的拖拽操作? 包括使用swt封装好的browser实现的浏览器,如何监听它的拖拽操作?还有如果使用ole的方式调用ie,如何实现监听ie的拖拽操作? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能说的具体点吗,SWT支持拖拽功能,不过编程实现比较繁琐。首先要设定好拖拽源(DragSource)和能够接收的目标地(DropTarget),然后再设定一个运送拖拽数据的载体(Transfer),最后最繁琐的就是要给DragSource和DropTarget分别添加拖拽监听器,并根据拖拽途中的各种情况实现监听器的各方法。 我这有一段代码,是用来在浏览器上添加监视拖拽操作的,但是不起作用。我想问的就是有什么办法得到浏览器上面的ole drag操作。import org.eclipse.swt.SWT;import org.eclipse.swt.dnd.DND;import org.eclipse.swt.dnd.DropTarget;import org.eclipse.swt.dnd.DropTargetEvent;import org.eclipse.swt.dnd.DropTargetListener;import org.eclipse.swt.dnd.FileTransfer;import org.eclipse.swt.dnd.Transfer;import org.eclipse.swt.ole.win32.OLE;import org.eclipse.swt.ole.win32.OleAutomation;import org.eclipse.swt.ole.win32.OleControlSite;import org.eclipse.swt.ole.win32.OleFrame;import org.eclipse.swt.ole.win32.Variant;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;public class Test { public static void main(String[] args) { //a. Create Shell Display display = new Display(); Shell shell = new Shell( display ); shell.setSize( 610, 400 ); //b. Create Browser (the old way) OleFrame frame = new OleFrame( shell, SWT.NONE ); OleControlSite site = new OleControlSite( frame, SWT.NONE, "Shell.Explorer" ); site.doVerb( OLE.OLEIVERB_INPLACEACTIVATE ); OleAutomation browser = new OleAutomation( site ); //c. Disable "link navigation" and go to google int[] nameIds = browser.getIDsOfNames(new String[] { "RegisterAsDropTarget"} ); //is this really necessary (I wonder)? browser.setProperty(nameIds[0], new Variant(false) ); //true or false --doesn't work nameIds = browser.getIDsOfNames( new String[] { "Navigate", "URL"} ); browser.invoke( nameIds[0], new Variant[] { new Variant("http://www.google.com") }, new int[] { nameIds[1] } ); //d. Listen to drop events ??? DropTarget target = new DropTarget(frame, DND.DROP_COPY ); // <--help here!!! target.setTransfer( new Transfer[] { FileTransfer.getInstance() } ); target.addDropListener( new DropTargetListener() { public void dragEnter(DropTargetEvent event) { System.out.println("drag enter"); } public void dragLeave(DropTargetEvent event) { System.out.println("drag leave");} public void dragOver(DropTargetEvent event) { System.out.println("drag over");} public void dragOperationChanged(DropTargetEvent event) { System.out.println("drag changed");} public void dropAccept(DropTargetEvent event) { System.out.println("drag accept");} public void drop(DropTargetEvent event) { String[] files = (String[]) event.data; //expects FileTransfer data for (int p=0;p<files.length; p++) System.out.println( files[p] ); }/*drop*/ }); //e. Show window frame.setBounds( 0,0, 600, 400 ); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } /*while*/ browser.dispose(); display.dispose(); }/*main*/ }/*test*/ java中有类似C#里ref或out的功能吗? 如何将这个字符串加入到已有字符串后面 关于java反射取得方法并运行的问题 关于微博API的。。。 简单日期格式问题?急。。。。。在线等! protected内部类的包外访问问题 java处理文本问题:如何判断在10000行后,清空该文本,重新从头开始往里写信息? 请大家帮忙解决个问题 求教~哪位大虾能给我一个java 做客户端 ,c 语言写服务器端的例子吗?udp 或 tcp都 行~~~ 请教关于往.jar中写入xml文件的问题 用SWT做一个登陆的小东西。 向各位java爱好者, 紧急求助!!!!!!!!
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleControlSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;public class Test { public static void main(String[] args)
{ //a. Create Shell
Display display = new Display();
Shell shell = new Shell( display );
shell.setSize( 610, 400 ); //b. Create Browser (the old way)
OleFrame frame = new OleFrame( shell, SWT.NONE );
OleControlSite site = new OleControlSite( frame, SWT.NONE, "Shell.Explorer" );
site.doVerb( OLE.OLEIVERB_INPLACEACTIVATE );
OleAutomation browser = new OleAutomation( site );
//c. Disable "link navigation" and go to google
int[] nameIds = browser.getIDsOfNames(new String[] { "RegisterAsDropTarget"} ); //is this really necessary (I wonder)?
browser.setProperty(nameIds[0], new Variant(false) ); //true or false --doesn't work nameIds = browser.getIDsOfNames( new String[] { "Navigate", "URL"} );
browser.invoke( nameIds[0], new Variant[] { new Variant("http://www.google.com") },
new int[] { nameIds[1] } ); //d. Listen to drop events ???
DropTarget target = new DropTarget(frame, DND.DROP_COPY ); // <--help here!!!
target.setTransfer( new Transfer[] { FileTransfer.getInstance() } );
target.addDropListener( new DropTargetListener()
{
public void dragEnter(DropTargetEvent event) { System.out.println("drag enter"); }
public void dragLeave(DropTargetEvent event) { System.out.println("drag leave");}
public void dragOver(DropTargetEvent event) { System.out.println("drag over");}
public void dragOperationChanged(DropTargetEvent event) { System.out.println("drag changed");}
public void dropAccept(DropTargetEvent event) { System.out.println("drag accept");}
public void drop(DropTargetEvent event)
{
String[] files = (String[]) event.data; //expects FileTransfer data
for (int p=0;p<files.length; p++)
System.out.println( files[p] );
}/*drop*/
}); //e. Show window
frame.setBounds( 0,0, 600, 400 );
shell.open(); while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
} /*while*/ browser.dispose();
display.dispose(); }/*main*/
}/*test*/