Я недавно написал приложение, используя SWT. В одном из его диалоговых окон у меня есть несколько виджетов, одним из которых является Text, который предназначен для поддержки DND с другими виджетами. Сначала я добавил поддержку DND для двух виджетов Tree в одном и том же диалоговом окне (перетаскивая источник и цель перетаскивания). Прежде чем я добавил поддержку DND для этого текстового виджета, я заметил, что на платформе Linux (gtk) текстовый виджет SWT автоматически получает поддержку перетаскивания. То есть я уже могу перетаскивать из других виджетов «Дерево» и перетаскивать этот текст (в любую позицию для вставки туда), а также выделять и перетаскивать любой текст из этого текста в другой виджет «Дерево» или «Текст».
Однако это работает только на платформе Linux, но не на Windows. Эта же программа, если она работает в Windows, не будет иметь никакой поддержки DND для этого текстового виджета (виджеты Tree, конечно, имеют поддержку 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