【问题标题】:Flickering/blinking of JDialog as notificationJDialog 闪烁/闪烁作为通知
【发布时间】:2012-03-22 10:03:32
【问题描述】:

我正在使用 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();
}

有人遇到过类似的问题吗?你是怎么解决的?关于我应该尝试做什么的任何其他建议?

【问题讨论】:

  • 发布 SSCCE (sscce.org),我们可能会找到您的问题。但它不应该闪烁。
  • @Guillaume Polet SSCCE 今天倒闭了,对我来说 :-),我向国王陛下发送了请求 :-)
  • @mKorbel 我刚刚又试了一次,没问题。还为你失望?顺便说一句 - “陛下”?不,只要“他人,宇宙之主”就可以了。 ;)
  • @Andrew Thompson 发生了一些错误,没有更改(包括 Swing JComponents,其余教程对我有用),也许是我们的 squid 代理,.. 呵呵,好吧,对,没有 cmets关于你的.... :-)

标签: java swing netbeans notifications jdialog


【解决方案1】:
  • 相反的是带有 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);
        }
    });
}

【讨论】:

  • 只是想知道为什么要隐藏然后显示对话框,以及 pack() 调用是否不应发生在 setLocation 之前,以便 getWidth() 和 getHeight() 将返回由设置的更新值布局管理器?
  • 关于Initial Thread 的一切对我来说都是关于packsetVisible 两种方法,顺便说一句,假设OP a) re_use JDialog 或@,我在上午代码行方面有很好的经验987654329@在运行时新建一个
  • @Guillaume Polet 现在我看到你不知道如何在 cmets 中使用 URL 点击帮助(评论窗口左下方),然后复制 '"link"',这里显示字符 '"[link]"' 和这里的 url '"(example.com)"'
  • 好吧,我的错,但我发现链接只能通过粘贴 URL 来工作。我懒得写完整的东西。在 cmets 中不使用正确的链接真的很糟糕吗?
  • 对不起,我想我今天早上醒来太累了。为此我会用头撞墙 3 次
猜你喜欢
  • 2016-12-12
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多