1

このタイプのクラスがありorg.eclipse.swt.widgets.Textます。私が開発しているEclipseプラグインの中にあります。ユーザーがこのフィールド内からテキストを選択するイベントを処理したいと考えています。つまり... フォーカスしているときに、テキストをクリックし、左または右にドラッグしてテキストを選択します。このテキストが選択されたら、イベントを発生させる必要があります。

私のニーズをカバーする適切なリスナーをまだ見つけることができません。

4

2 に答える 2

8

SWT.MouseUpお探しのイベントだと思います。「矢印キーとシフト選択」を確認したい場合は、イベントのSWT.KeyUpも聞いて確認してください。keyCode

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, false));

    Text text = new Text(shell, SWT.BORDER);
    text.setText("BLABLABLA");

    text.addListener(SWT.MouseUp, new Listener() {

        @Override
        public void handleEvent(Event event) {
            Text text = (Text) event.widget;

            String selection = text.getSelectionText();

            if(selection.length() > 0)
            {
                System.out.println("Selected text: " + selection);
            }
        }
    });

    text.addListener(SWT.KeyUp, new Listener() {

        @Override
        public void handleEvent(Event event) {
            Text text = (Text) event.widget;

            String selection = text.getSelectionText();

            if(selection.length() > 0 && event.keyCode == SWT.SHIFT)
            {
                System.out.println("Selected text: " + selection);
            }
        }
    });

    shell.pack();
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}

このコードは、ユーザーが実際に何かを選択した場合にのみ、選択内容を出力します。選択せずにマウスアップまたはキーアップした場合、何も起こりません。

スペースを節約するために、両方を 1 つのリスナーにまとめることができます。

于 2012-10-26T19:13:59.683 に答える
1

テキストを選択するには、org.eclipse.swt.custom.StyledTextの使用を検討する必要があります。選択リスナーを登録する必要があります。下記参照:

public void addSelectionListener(SelectionListener listener)

選択リスナーを追加します。選択イベントは、ユーザーが選択を変更したときにウィジェットによって送信されます。widgetSelectedが呼び出されると、イベントのxフィールドとyフィールドに、選択範囲の開始カレットインデックスと終了カレットインデックスが含まれます。widgetDefaultSelectedはStyledTextsに対して呼び出されません。

于 2012-10-27T00:18:20.997 に答える