我正在使用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();
}
有没有人有类似的问题?你是怎么解决的?关于我应该尝试做什么的任何其他建议?
答案 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);
}
});
}