如何在 swt 中为文本编辑器实现 ctrl+backspace 和 ctrl+delete

Posted

技术标签:

【中文标题】如何在 swt 中为文本编辑器实现 ctrl+backspace 和 ctrl+delete【英文标题】:how to implement ctrl+backspace and ctrl+delete for a text edior in swt 【发布时间】:2015-02-25 11:05:14 【问题描述】:

我已经创建了一个 SWT 文本编辑器,还实现了剪切、复制和粘贴功能,但现在我需要实现 CTRL + BACKSPACE,以删除前面的单词, 和 CTRL + DEL,删除前面的单词。

复制文本的代码

private class Copy implements SelectionListener
    public void widgetSelected(SelectionEvent event)   
        Display.getDefault().asyncExec(new Runnable() 
            @Override
            public void run()      
                copySelectedMessages();
            

            private void copySelectedMessages()
                //StringBuffer stringCopied =new StringBuffer();

                String textData = editor.getSelectionText();
                //TextTransfer textTransfer = TextTransfer.getInstance();

                System.out.println("you hv selected"+textData);

                //Clipboard clipboard = new Clipboard(Display.getDefault());
                TextTransfer transfer = TextTransfer.getInstance();      
                clipboard.setContents(new Object[]  textData , new TextTransfer[]  transfer );
            
        );
    

编辑器的代码

editor = new StyledText( this, SWT.MULTI | SWT.V_SCROLL );
editor.setLayoutData( new GridData(GridData.FILL_BOTH) );
editor.setFont( new Font(Display.getDefault(),"Cambria", 10, SWT.NORMAL) );

听者

proceeding.addSelectionListener(new proceed());

private class proceed implements SelectionListener
    public void widgetSelected(SelectionEvent event)       
        Display.getDefault().asyncExec(new Runnable() 
            @Override
            public void run()       
                // Code to check for CTRL + backspace and CTRL + delete
            
    );

那么现在如何在 SWT 中实现 CTRL+BACKSPACECTRL+ DELETE功能。

【问题讨论】:

***.com/questions/11659801/… 和 ***.com/questions/5970765/… 我需要在调用监听器时如何删除前导词和前导词的逻辑。我编写了调用监听器但没有得到逻辑的代码 嗯,你的听众在哪里? 在你可以检查的问题中更新 【参考方案1】:

addSelectionListener() 是这里使用的错误方法;使用addKeyListener(),然后使用KeyAdapter 来处理事件。

java2s 有一个例子:http://www.java2s.com/Code/JavaAPI/org.eclipse.swt.custom/StyledTextaddKeyListenerKeyListenerkey.htm

或者在这里查看更完整的:http://www.java2s.com/Tutorial/Java/0280__SWT/Asimpleeditor.htm

您不需要实现“复制到剪贴板”的代码,因为StyledText 已经实现了这一点。只需调用copy() 方法。第二个示例显示如何通过菜单项为 Ctrl+C 安装全局侦听器。

至于如何删除下一个或上一个单词,请致电st.invokeAction()ST.DELETE_WORD_NEXTST.DELETE_WORD_PREVIOUS (org.eclipse.swt.custom.ST)。

默认情况下,这些操作绑定到 Ctrl+BackSpaceCtrl+Delete。但同样,这些键仅在小部件具有焦点时触发操作。如果无论窗口中的哪个小部件具有焦点都想启用它们,请创建一个菜单项。

【讨论】:

能不能实现invokeAction()方法

以上是关于如何在 swt 中为文本编辑器实现 ctrl+backspace 和 ctrl+delete的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 swt 文本框的悬停文本

VerifyListener 不允许 SWT 文本中的 CTRL + X 操作

Android uiautomatorviewer 运行错误

如何在 Eclipse 中为所有文本编辑器更改字体大小?

如何在 MFC C++ 中为文本添加下划线

如何收听组小部件(Java SWT)的文本修改事件?