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

标签 java swt drag-and-drop

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

但是,这仅适用于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 而不是文本小部件
  2. 使用 StyledTextDropTargetEffect(或扩展它)并将其添加为 dr op 监听器

最佳答案

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

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

关于java - 对文本小部件的 SWT 拖放支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/914654/

相关文章:

java - GridLayout 的 setLineBackground

drag-and-drop - Javafx 拖放 TabPane

Java Enums : Two enum types, 每个都包含对彼此的引用?

java - 如何使用 ArrayList 创建一个表来保存来自继承类的不同对象?

java - 本地代码深处的 FileDialog.open() 偶尔导致 JVM 崩溃

java - SWT RowLayout 从右到左?

javascript - 将 HTML5 拖放对象恢复到原始 div 容器

javascript - 如何倾斜/旋转在javascript拖放中被拖动的项目?

java - 文件比较不会将结果写入文件

java - 系统找不到路径