我最近使用 SWT 编写了一个应用程序。在其中一个对话框中,我有一些小部件,其中之一是文本,它旨在支持其他小部件的免打扰。我首先在同一对话框(拖动源和放置目标)上添加了对 2 Tree 小部件的 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 中,使用文本小部件无法轻松做到这一点。拖放时,您可以在最后一个光标位置或文本末尾插入文本。您可以考虑使用 StyledText 小部件,它支持在任何位置放置和“插入符号悬停”。
- Text 和 StyledText 都支持 SWT.MULTI 样式以实现多行。
您可以在SWT snippets找到许多很棒的代码片段。页面包括使用 StyledText 小部件进行拖放的示例。还有一个很好的介绍DND in SWT .
关于java - 对文本小部件的 SWT 拖放支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/914654/