Мерцание / мигание JDialog как уведомления - PullRequest
0 голосов
/ 22 марта 2012

Я использую JDialog для отображения уведомлений в правом нижнем углу моего приложения.Я показываю до 4-х уведомлений, а самое последнее наверху.Уведомления отображаются в соответствии с содержимым с сервера, поэтому может быть только 1 уведомление или 3, максимум 4. Это приводит к изменению размера JDialog и изменению размера, приводящему к изменению местоположения JDialog, чтобы его всегда выравнивали в правом нижнем углу.Изменение местоположения при каждом новом доходе от уведомления вызывает мерцание JDialog.

Ниже приведен код, который я вызываю каждый раз, когда приходит новое уведомление:

private void updateDialog()
{

    Point p = frame.getLocationOnScreen();
    p.x += frame.getWidth()-getWidth()-5;
    p.y += frame.getHeight()-getHeight()-25;

    setLocation(p); 
    pack();
    repaint();
}

У кого-нибудь была проблема с симляром?Как ты это решил?Любой другой совет о том, что я должен попытаться сделать?

1 Ответ

3 голосов
/ 22 марта 2012
  • contraproductive - это строка кода с repaint (), удалите ее,

  • , если внутри void updateDialog () нет других строк кода, то лучше быбыть, в противном случае pack () должен быть заключен в invokeLater ();

код

private void updateDialog() {
    setVisible(false);
    Point p = frame.getLocationOnScreen();
    p.x += frame.getWidth() - getWidth() - 5;
    p.y += frame.getHeight() - getHeight() - 25;
    setLocation(p);
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            pack();
            //repaint(); // useless remove this codeline
            setVisible(true);
        }
    });
}
...