Перемещение прямоугольника в Swing JPanel: оригинал остается - PullRequest
0 голосов
/ 17 марта 2011

Я пытаюсь сделать башню из решателя Ханоя, которая просто решает Ханой без каких-либо событий мыши.Проблема в том, что когда я перемещаю прямоугольник, оригинал остается даже после перекраски.Я искал в сети и пытался изменить код, но ничего не получалось.Я использую JFrame с JPanel внутри него, если это что-то меняет.
Здесь у меня есть класс диска, представляющий собой просто прямоугольник с цветом.

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 Ответ

1 голос
/ 17 марта 2011

Вы вызываете repaint () в нескольких местах, и вам не следует.

У вас должен быть класс верхнего уровня, который рисует, вызывайте метод paintSquare и любой другой необходимый метод.Эти методы не должны вызывать repaint ().

Кроме того, ваш простой диск перемещения действительно странен тем, что он передает массив дисков, индекс и графический объект.Вместо этого заставьте это просто взять на Диске.Просто передайте его из массива, который требуется обновить.Затем позвольте любому классу, который вызывает simpleMoveDisk, отдельно вызовите перерисовку вместо того, чтобы пытаться рисовать и обновлять модель тем же методом.

...