2

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

1 に答える 1

3
  1. &
  2. Windows では、Text ウィジェットを使用して簡単にそれを行うことはできません。ドロップ時に、最後のカーソル位置またはテキストの最後にテキストを挿入できます。任意の位置でのドロップと「キャレット ホバリング」もサポートする StyledText ウィジェットの使用を検討してください。
  3. Text と StyledText はどちらも、複数行の SWT.MULTI スタイルをサポートしています。

SWT スニペットページには、StyledText ウィジェットを使用したドラッグ アンド ドロップの例を含む、多くの優れたコード スニペットがあります。また、SWT には DNDの優れた紹介があります。

于 2009-06-22T12:24:39.983 に答える