eclipse 如何对swt的组件实现undo 和 redo操作
时间: 2023-10-27 13:04:27 浏览: 132
在Eclipse中,可以使用JFace的org.eclipse.jface.text包的undo/redo框架来实现对SWT组件的撤销/重做操作。以下是一个简单的示例代码,演示如何在Eclipse中对SWT Text组件进行撤销/重做操作:
```java
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextOperationTarget;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.TextViewerUndoManager;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class SWTUndoRedoExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
// 创建SWT Text组件
Text text = new Text(shell, SWT.BORDER | SWT.MULTI);
// 创建SourceViewer控件
SourceViewer viewer = new SourceViewer(shell, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
IDocument document = new Document();
viewer.setDocument(document);
// 将SWT Text组件设置为Viewer的文本输入目标
ITextOperationTarget target = (ITextOperationTarget) viewer;
target.setTargetEditor(text);
// 创建撤销/重做管理器并将其设置为Viewer的撤销/重做管理器
TextViewerUndoManager undoManager = new TextViewerUndoManager(20);
viewer.setUndoManager(undoManager);
// 显示窗口
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
```
在上面的示例代码中,创建了一个SWT Text组件和一个SourceViewer控件,然后将SWT Text组件设置为Viewer的文本输入目标。接着创建了一个TextViewerUndoManager对象,并将其设置为Viewer的撤销/重做管理器。现在,当用户输入文本并按下Ctrl+Z或Ctrl+Y键时,就可以执行撤销/重做操作。
需要注意的是,撤销/重做操作只对文本输入产生影响。如果要在SWT组件中实现其他类型的撤销/重做操作,需要自己编写相应的代码。
阅读全文