为org.eclipse.jface.text.TextViewer添加undo、redo 并添加Ctrl+z,与Ctrl+y功能

为org.eclipse.jface.text.TextViewer添加undo、redo 并添加Ctrl+z,与Ctrl+y功能

       前两天遇到为org.eclipse.jface.text.TextViewer添加undo、redo 并添加Ctrl+z,与Ctrl+y功能这个问题,搜遍了国内网站,也没有个好结果,终于多天后在一个国外的svn服务器上找到了一段代码,解决了问题
1、为TextViewer添加TextViewerUndoManager来管理记录

protected  TextViewer textViewer;
     
protected  TextViewerUndoManager undoManager;
     
      
// 20是保存记录的数量。
     undoManager  =   new  TextViewerUndoManager( 20 );
     
     
// 绑定对textViewer控件的数据进行管理
     undoManager.connect(textViewer);
     textViewer.setUndoManager(undoManager);


2、添加Ctrl+z,与Ctrl+y事件

StyledText styledText  =  textViewer.getTextWidget();
styledText.addKeyListener(
new  KeyListener( )  {
            
public void keyPressed( KeyEvent e )
            
{
                
if ( isUndoKeyPress( e ) )
                
{
                    textViewer.doOperation( ITextOperationTarget.UNDO );
                }

                
else if ( isRedoKeyPress( e ) )
                
{
                    textViewer.doOperation( ITextOperationTarget.REDO );
                }

            }

            
private boolean isUndoKeyPress( KeyEvent e )
            
{
                
// CTRL + z
                return ( ( e.stateMask & SWT.CONTROL ) > 0 )
                
&& ( ( e.keyCode == 'z' ) || ( e.keyCode == 'Z' ) );
            }

            
private boolean isRedoKeyPress( KeyEvent e )
            
{
                
// CTRL + y
                return ( ( e.stateMask & SWT.CONTROL ) > 0 )
                
&& ( ( e.keyCode == 'y' ) || ( e.keyCode == 'Y' ) );
            }

            
public void keyReleased( KeyEvent e )
            
{
                
// do nothing
            }

        }
);

你可能感兴趣的:(为org.eclipse.jface.text.TextViewer添加undo、redo 并添加Ctrl+z,与Ctrl+y功能)