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 ();
}

如果用户真的选择了某些东西,此代码只会打印选择。如果是没有选择的鼠标或键,则不会发生任何事情。

您可能希望将两者结合在一个侦听器中以节省空间。

于 2012-10-26T19:13:59.683 回答
1

为了获得文本选择,您应该考虑使用 org.eclipse.swt.custom.StyledText。您需要注册一个选择侦听器。见下文:

public void addSelectionListener(SelectionListener listener)

添加选择侦听器。当用户更改选择时,小部件会发送一个 Selection 事件。当 widgetSelected 被调用时,事件 x 和 y 字段包含选择的开始和结束插入符号索引。不为 StyledTexts 调用 widgetDefaultSelected。

于 2012-10-27T00:18:20.997 回答