我正在努力建造一个河内解算器塔,它可以简单地解决河内没有任何鼠标事件。问题是当我移动矩形原始遗体时,即使我重新绘制。我在网上搜索并尝试更改代码但是没有用。我正在使用带有JPanel的JFrame,如果它改变了什么。
我这里的磁盘类只是一个带颜色的矩形。
class Disk extends Rectangle {
Color diskColour;
public Disk(int a, int b, int c, int d, Color colour) {
x = a;
y = b;
width = c;
height = d;
diskColour = colour;
}
public Color getColour() {
return diskColour;
}
public void paintSquare(Graphics g) {
repaint();
g.setColor(diskColour);
g.fillRect(x, y, width, height);
repaint();
}
}
这是我实际调用paintSquare方法的代码:
public void simpleMoveDisk(Disk[] disks, int n, Graphics g) {
disks[n].setLocation(30,25);
disks[n].paintSquare(g);
repaint();
}
paintSquare方法绘制磁盘,而setLocation方法更改其坐标。 当这个运行时,矩形出现在新位置,但旧的仍然存在。感谢任何帮助,提前谢谢。
答案 0 :(得分:1)
你在几个地方调用repaint()而你不应该这样。
让您的顶级类正在进行绘制,调用paintSquare方法以及所需的任何其他方法。那些方法不应该调用repaint()。
此外,您的简单移动磁盘非常奇怪,因为它传递了磁盘,索引和图形对象的数组。而是让它只需要一个磁盘。只需将其中的一个传递给需要更新的数组。然后让任何调用simpleMoveDisk的类分别调用重绘,而不是尝试在同一方法中绘制和更新模型。