我正在努力解决一个我似乎无法解决的奇怪问题。我使用了各种方法(比如直接通过shape.rightident = 1设置变量等)。
类别:
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
public abstract class MyShape {
protected int rightidentifier = -1; // to make sure you get an error when it is not being changed.
protected int x1, y1, x2, y2;
protected int width, height, startx, starty;
public MyShape() {
this(0, 0, 0, 0);
}
public MyShape(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
public void setRightIdent(int identt) {
this.rightidentifier = identt;
}
public int getRightIdent() {
return this.rightidentifier;
}
}
现在,当我尝试设置变量时:
public void addToShapeList(MyShape shape) {
int currcount;
switch(shape.type) {
case "Rectangle":
rectanglecount++;
currcount = rectanglecount;
break;
case "Line":
linecount++;
currcount = linecount;
break;
case "Ellipse":
ellipsecount++;
currcount = ellipsecount;
break;
default:
currcount = 0;
break;
}
listModel.addElement(shape.type + " " + currcount);
shape.rightidentifier = listModel.size() - 1;
shape.setRightIdent(listModel.size()-1);
System.out.println("setted rightident to " + (listModel.size() -1));
System.out.println("Rightident now:" + shape.getRightIdent());
}
public void deleteFromList(MyShape shape) {
System.out.println("tried to remove rightident: " + shape.getRightIdent());
listModel.remove(shape.getRightIdent());
}
然后系统输出:
setted rightident to 0
Rightident now:0
tried to remove rightident: -1
似乎对象没有保存更新的变量,我该怎么做才能保存变量?
修改:完整代码:https://github.com/Rubenkl/peent-daanruben/tree/peent2-ruben/Colorclicker/src
可以在此处找到调用addtoShape和deletefromShape的类: https://github.com/Rubenkl/peent-daanruben/blob/peent2-ruben/Colorclicker/src/DrawingPanel.java
答案 0 :(得分:0)
我发现了问题。您永远不会在 DrawingPanel.java 中新创建的形状上设置正确的标识。这是我对你的解决方法:
switch(command) {
case "Rectangle":
shape = new MyRectangle(start.x, start.y, end.x, end.y);
shape.setRightIdent(index); // here
if (newww) {
rightPanel.addToShapeList(shape);
shapesList.add(shape);
} else {
shape.getRightIdent());
shapesList.set(index, shape);
}
break;
case "Line":
shape = new MyLine(start.x, start.y, end.x, end.y);
shape.setRightIdent(index); // here
if (newww) {
rightPanel.addToShapeList(shape);
shapesList.add(shape);
} else {
shapesList.set(index, shape);
}
break;
case "Ellipse":
shape = new MyEllipse(start.x, start.y, end.x, end.y);
shape.setRightIdent(index); // here
if (newww) {
rightPanel.addToShapeList(shape);
shapesList.add(shape);
} else {
shapesList.set(index, shape);
}
break;