2

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

但是,这仅适用于 Linux 平台,不适用于 Windows。同一个程序,如果在 Windows 上运行,则不会对该文本小部件提供任何 DND 支持(树小部件当然支持 DND,因为我专门为它们编写)。

所以这也是我想在 Windows 上实现的目标:

  1. 在文本小部件中的任何位置放置文本。
  2. 在下降之前和悬停时,能够清楚地看到插入符号的位置,即预期下降的位置。插入符号位置应随鼠标光标移动。
  3. 支持文本小部件中的多行

解决方案:

DropTarget target = new DropTarget(sytledText, DND.DROP_MOVE | DND.DROP_COPY);
target.setTransfer(new Transfer[] { TextTransfer.getInstance() });
target.addDropListener(new StyleTextDropTargetEffect(sytledText));
  1. 使用 StyledText 而不是 Text 小部件
  2. 使用 StyledTextDropTargetEffect(或扩展它)并将其添加为拖放侦听器
4

1 回答 1

3
  1. &
  2. AFAIK 在 Windows 中,您不能轻松地使用 Text 小部件来做到这一点。在放置时,您可以在最后一个光标位置或文本末尾插入文本。您可以考虑使用 StyledText 小部件,它支持在任何位置放置和“插入符号悬停”。
  3. Text 和 StyledText 都支持多行的 SWT.MULTI 样式。

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

于 2009-06-22T12:24:39.983 回答