在eclipse中,写出使用commandstack来实现viewpart通过菜单栏Edit进行undo/redo的代码
时间: 2024-02-05 19:12:49 浏览: 157
首先,需要在 ViewPart 类中定义 CommandStack 对象:
```java
private CommandStack commandStack = new CommandStack();
```
然后,在创建菜单栏的 createPartControl 方法中,添加 undo 和 redo 菜单项,并为它们设置相应的动作:
```java
public void createPartControl(Composite parent) {
// ...
// 创建菜单栏
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createMenuBar(parent);
getSite().registerContextMenu(menuManager, null);
// 创建 Edit 菜单
MenuManager editMenuManager = new MenuManager("Edit");
menuManager.add(editMenuManager);
// 创建 Undo 菜单项
Action undoAction = new Action() {
public void run() {
commandStack.undo();
}
};
undoAction.setText("Undo");
editMenuManager.add(undoAction);
// 创建 Redo 菜单项
Action redoAction = new Action() {
public void run() {
commandStack.redo();
}
};
redoAction.setText("Redo");
editMenuManager.add(redoAction);
// ...
}
```
最后,在执行每个操作时,需要将其包装成 Command 对象,并将其推入 CommandStack 中:
```java
Command command = new Command() {
public void execute() {
// 执行操作
}
public void undo() {
// 撤销操作
}
public void redo() {
// 重做操作
}
};
commandStack.execute(command);
```
这样,就可以通过菜单栏的 Edit -> Undo/Redo 来撤销和重做操作了。
阅读全文