我目前正在制作一个绘画程序,并正在实现撤消和重做功能。到目前为止,如果我删除了重做部分的代码,它可以工作,但由于某些原因,如果我重新添加重做代码,它只会抛出arrayOutOfIndex异常或NullPointer。我什么都试过了,不知道还能做什么!
很抱歉,如果这个问题非常简单,我只是一个初学者。
代码:
public void redo()
{
for(int i = 0; i < 3; i++ ){
if(redo[0].get(0)!=null){
al.add((Shape) redo[0].get(redo[0].size()-1));
cl.add((Color) redo[1].get(redo[1].size()-1));
tl.add((Integer) redo[2].get(redo[2].size()-1));
lineEnd.add((Integer) redo[3].get(redo[3].size()-1));
junction.add((Component) redo[4].get(redo[4].size()-1));
}
redo[0].remove(redo[0].size()-1);
redo[1].remove(redo[1].size()-1);
redo[2].remove(redo[2].size()-1);
redo[3].remove(redo[3].size()-1);
redo[4].remove(redo[4].size()-1);
}
repaint();
}
public void undo()
{
for(int i = 0; i < 3; i++ ){
Shape alComponent = al.get(al.size()-1);
Color clComponent = cl.get(cl.size()-1);
Integer tlComponent = tl.get(tl.size()-1);
Integer lineEndComponent = lineEnd.get(lineEnd.size()-1);
Integer junctionComponent = juncture.get(juncture.size()-1);
if(al.get(0)!=null){
redo[0].add(alComponent);
redo[1].add(clComponent);
redo[2].add(tlComponent);
redo[3].add(lineEndComponent);
redo[4].add(junctionComponent);
}
al.remove(al.size()-1);
cl.remove(cl.size()-1);
tl.remove(tl.size()-1);
lineEnd.remove(lineEnd.size()-1);
juncture.remove(juncture.size()-1);
}
repaint();
} 另外,我有一个for循环,因为如果你按下它一次,画上的变化是很小的。
发布于 2014-01-30 05:18:01
在你的重做循环中,你
check an the >检查是否存在可重做的项并重做如果可以,请从重做列表中删除项then
将remove()%s移动到if块中。
另外,不要使用五个数组。创建一个具有良好名称的重做列表来为您完成所有这些工作的类。(这只是一个提示,与你的问题无关。)
https://stackoverflow.com/questions/21442603
复制相似问题