JDialog的闪烁/闪烁作为通知

时间:2012-03-22 10:03:32

标签: java swing netbeans notifications jdialog

我正在使用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 个答案:

答案 0 :(得分:3)

  • 反效果是带有repaint()的代码行,删除它,

  • 如果在update 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);
        }
    });
}