📄 drawshapecommand.java
字号:
package project;
//具体命令,实现了Command接口,负责绘制图形以及undo,redo操作
public class DrawShapeCommand implements Command{
private DrawShapePanel drawShapePanel;
private DrawShapeFrame drawShapeFrame;
private Shape shape;
public DrawShapeCommand(DrawShapePanel drawShapePanel)
{
this.drawShapePanel = drawShapePanel;
}
//必要参数,指定绘制图形所需要的DrawShapeFrame
public void setDrawShapeFrame(DrawShapeFrame drawShapeFrame)
{
this.drawShapeFrame = drawShapeFrame;
}
//必要参数,指定需要绘制的图形的具体类型
public void setShape(Shape shape)
{
this.shape = shape;
}
//执行绘制命令
public void execute() {
drawShapePanel.addShape(shape);
drawShapePanel.repaint();
checkEmptyArrayList();
//控制redo菜单与redo按钮是否可使用
if((drawShapePanel.preservedShapeArrayList).size() > 0)
{
(drawShapePanel.preservedShapeArrayList).clear();
(drawShapeFrame.redo).setEnabled(false);
(drawShapeFrame.redoButton).setEnabled(false);
}
}
//undo操作
public void undo() {
int lastIndex = (drawShapePanel.shapeArrayList).size() - 1;
Shape shape = (drawShapePanel.shapeArrayList).get(lastIndex);
(drawShapePanel.preservedShapeArrayList).add(shape);
(drawShapePanel.shapeArrayList).remove(lastIndex);
drawShapePanel.repaint();
checkEmptyArrayList();
}
//redo操作
public void redo() {
int lastIndex = (drawShapePanel.preservedShapeArrayList).size() - 1;
Shape shape = (drawShapePanel.preservedShapeArrayList).get(lastIndex);
(drawShapePanel.shapeArrayList).add(shape);
(drawShapePanel.preservedShapeArrayList).remove(lastIndex);
drawShapePanel.repaint();
checkEmptyArrayList();
}
//检查drawShapePanel的两个ArrayList
//其中shapeArrayList负责记录当前存在的图形
//preservedShapeArrayList负责记录当前不存在,但是在undo,redo时需要恢复的图形
//根据检查的结果,控制undo菜单与undo按钮,redo菜单与redo按钮的可用与不可用
public void checkEmptyArrayList()
{
if((drawShapePanel.shapeArrayList).size() <= 0)
{
(drawShapeFrame.undo).setEnabled(false);
(drawShapeFrame.undoButton).setEnabled(false);
}
else
{
(drawShapeFrame.undo).setEnabled(true);
(drawShapeFrame.undoButton).setEnabled(true);
}
if((drawShapePanel.preservedShapeArrayList).size() <= 0)
{
(drawShapeFrame.redo).setEnabled(false);
(drawShapeFrame.redoButton).setEnabled(false);
}
else
{
(drawShapeFrame.redo).setEnabled(true);
(drawShapeFrame.redoButton).setEnabled(true);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -