在Swing JPanel中移动一个矩形:原始停留

时间:2011-03-16 22:33:18

标签: java swing jpanel

我正在努力建造一个河内解算器塔,它可以简单地解决河内没有任何鼠标事件。问题是当我移动矩形原始遗体时,即使我重新绘制。我在网上搜索并尝试更改代码但是没有用。我正在使用带有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方法更改其坐标。 当这个运行时,矩形出现在新位置,但旧的仍然存在。感谢任何帮助,提前谢谢。

1 个答案:

答案 0 :(得分:1)

你在几个地方调用repaint()而你不应该这样。

让您的顶级类正在进行绘制,调用paintSquare方法以及所需的任何其他方法。那些方法不应该调用repaint()。

此外,您的简单移动磁盘非常奇怪,因为它传递了磁盘,索引和图形对象的数组。而是让它只需要一个磁盘。只需将其中的一个传递给需要更新的数组。然后让任何调用simpleMoveDisk的类分别调用重绘,而不是尝试在同一方法中绘制和更新模型。