有没有办法监听swt的browser上面的拖拽操作?

dongle2001 2008-12-16 05:55:52
包括使用swt封装好的browser实现的浏览器,如何监听它的拖拽操作?
还有如果使用ole的方式调用ie,如何实现监听ie的拖拽操作?
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongle2001 2008-12-23
  • 打赏
  • 举报
回复
up
dongle2001 2008-12-16
  • 打赏
  • 举报
回复
我这有一段代码,是用来在浏览器上添加监视拖拽操作的,但是不起作用。我想问的就是有什么办法得到浏览器上面的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*/
weatherspoon 2008-12-16
  • 打赏
  • 举报
回复
能说的具体点吗,SWT支持拖拽功能,不过编程实现比较繁琐。首先要设定好拖拽源(DragSource)和能够接收的目标地(DropTarget),然后再设定一个运送拖拽数据的载体(Transfer),最后最繁琐的就是要给DragSource和DropTarget分别添加拖拽监听器,并根据拖拽途中的各种情况实现监听器的各方法。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧