Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT对文本小部件的拖放支持_Java_Swt_Drag And Drop - Fatal编程技术网

Java SWT对文本小部件的拖放支持

Java SWT对文本小部件的拖放支持,java,swt,drag-and-drop,Java,Swt,Drag And Drop,我最近使用SWT编写了一个应用程序。在它的一个对话框中,我有几个小部件,其中一个是文本,它被设计为与其他小部件一起支持DND。我首先在同一个对话框中添加了对两个树小部件的DND支持(拖放源和拖放目标)。在为该文本小部件添加DND支持之前,我注意到在Linux平台(gtk)上,SWT文本小部件自动获得拖放支持。也就是说,我已经可以从其他树小部件中拖动并放置此文本(插入到此处的任何位置),以及选择并将此文本中的任何文本拖动到其他树或文本小部件中 然而,这只适用于Linux平台,而不适用于Window

我最近使用SWT编写了一个应用程序。在它的一个对话框中,我有几个小部件,其中一个是文本,它被设计为与其他小部件一起支持DND。我首先在同一个对话框中添加了对两个树小部件的DND支持(拖放源和拖放目标)。在为该文本小部件添加DND支持之前,我注意到在Linux平台(gtk)上,SWT文本小部件自动获得拖放支持。也就是说,我已经可以从其他树小部件中拖动并放置此文本(插入到此处的任何位置),以及选择并将此文本中的任何文本拖动到其他树或文本小部件中

然而,这只适用于Linux平台,而不适用于Windows。同样的程序,如果在Windows上运行,将不会对文本小部件有任何DND支持(树小部件当然有DND支持,因为我是专门为它们编写的)

下面是我想在Windows上实现的目标:

  • 在文本小部件中的任意位置放置文本
  • 在下降前和悬停时,能够清楚地看到插入符号的位置,即预期下降的位置。插入符号位置应随鼠标光标移动
  • 支持多行输入文本小部件
  • 解决方案:

    DropTarget target = new DropTarget(sytledText, DND.DROP_MOVE | DND.DROP_COPY);
    target.setTransfer(new Transfer[] { TextTransfer.getInstance() });
    target.addDropListener(new StyleTextDropTargetEffect(sytledText));
    
  • 使用StyledText而不是文本小部件
  • 使用StyledTextDropTargetEffect(或扩展它)并将其添加为dr op侦听器
  • &
  • 在Windows中,您无法轻松使用文本小部件完成此操作。拖放时,可以在最后一个光标位置或文本末尾插入文本。您可以考虑使用样式文本控件,它支持在任何位置上的删除和“插入”,
  • Text和StyledText都支持SWT.MULTI样式作为多行

  • 您可以在页面上找到许多很棒的代码片段,包括使用StyledText小部件进行拖放的示例。还有一个很好的介绍。

    嗯,我确实弄脏了我的手,为自己做了一个。但是,我无法解决滚动位置的问题。事实证明,StyledText已经通过StyledTextDropTargetEffect类提供了这种支持。直到克萨巴提出来我才注意到。谢谢StyledText的主要优点是方法#insert(String),它将给定字符串设置为当前选定的文本/鼠标位置。文本小部件没有这样的方法。(写这篇文章是因为我第一次想知道StyledText的好处是什么)。你要走正确的路,tho。