Живопись в Свинге, мигающий вопрос - PullRequest
3 голосов
/ 27 сентября 2011

У меня следующая проблема в свинге.
Я реализую базовые операции рисования (линии, фигуры).Когда я двигаю мышь нажатой левой кнопкой, мне нужно перекрасить текущую форму.Поэтому я очищаю экран и перерисовываю уже нарисованные фигуры и в настоящее время рисуем одну.
Фигуры рисуются в методе paint(), а при событии перемещения мыши я вызываю repaint() (paint() вызывается автоматически).Проблема в том, что экран сильно мигает при каждом перекрашивании, и это выглядит очень некрасиво.Подскажите пожалуйста, что я делаю не так?Спасибо.

Ответы [ 4 ]

8 голосов
/ 27 сентября 2011

Я думаю, что вы ищете двойная буферизация .

2 голосов
/ 27 сентября 2011

Фигуры отрисовываются в paint ()

Произвольное рисование должно выполняться в методе paintComponent () и убедитесь, что вы вызываете super.paintComponent () в качестве первой строки.

Также пользовательская роспись выполняется на JPanel (или JComponent), а не на JFrame напрямую.

0 голосов
/ 06 декабря 2012

Вам не нужно очищать экран, достаточно просто вызвать repaint (), тогда этого достаточно.Если вам нужно очистить экран, он будет мигать, если вы не используете синхронизацию, потому что работа рисования выполняется в отдельном потоке.

0 голосов
/ 30 марта 2012

У меня была проблема мерцания или мигания. Я решил это, используя следующий код.

    public void update(Graphics g) {
       paint(g);
    }

    @Override
    public void paint(Graphics g) {

        //super.repaint();
        if (myimg != null) {
            g.drawImage(myimg, 0, 0, this);
        }
        //update(g);
    }
...