【问题标题】:What is the appropriate listener to use for Eclipse SWT Text?什么是 Eclipse SWT Text 的合适监听器?
【发布时间】:2012-10-26 19:05:34
【问题描述】:

我有一个此类org.eclipse.swt.widgets.Text。它位于我正在开发的 Eclipse 插件中。我想处理用户从该字段中选择文本的事件。那就是……在集中注意力时,他们单击某些文本并向左或向右拖动以选择文本。选择此文本时,我需要触发我的事件。

我还没有找到合适的听众来满足我的需要。

【问题讨论】:

    标签: java eclipse-plugin swt


    【解决方案1】:

    我认为SWT.MouseUp 是您正在寻找的事件。如果你想检查“箭头键和shift选择”,请同时收听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 ();
    }
    

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

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

    【讨论】:

    • 哦,我意识到用户也可以使用箭头键 + shift 来选择文本。我想我知道那个合适的听众。只希望日食有一个用于选择文本的预制。
    • @Zombies 然后为SWT.KeyUp 添加相同的监听器。无需“不接受”答案。
    • @Zombies 已编辑答案。顺便说一句:here 是您可以通过描述收听的所有事件的列表。
    【解决方案2】:

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

    public void addSelectionListener(SelectionListener listener)
    

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

    【讨论】:

    • 不,布拉。我已经尝试过了,这不适用于选定的文本。 Eclipse SWT 没有专门为选择文本而设计的事件处理程序。
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2018-01-21
    • 2015-10-16
    • 2013-02-20
    • 2016-10-09
    相关资源
    最近更新 更多