最近、SWTを使用してアプリケーションを作成しました。ダイアログボックスの1つに、いくつかのウィジェットがあります。そのうちの1つは、他のウィジェットでDNDをサポートするように設計されたテキストです。最初に、同じダイアログボックス(ドラッグソースとドロップターゲットの両方)に2つのツリーウィジェットの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を使用(または拡張)して、dropリスナーとして追加します