我试图弄清楚为什么当我手动拖动我的窗口时我的 JComponent 会刷新,但是当我调用 repaint 或 revalidate 时它不会刷新。数据已准备好显示,但在我手动调整大小之前它不会显示。任何人都可以就我能做什么提供一些建议,或者这听起来像是不是 Swing 问题,因为我尝试了重新绘制和重新验证?
我注意到的一件奇怪的事情是,如果我有这个代码:
sp.setSize(sp.getSize().width, sp.getSize().height+1);
sp.setSize(sp.getSize().width, sp.getSize().height-1);
如果使用第一行,则 JComponent 将自行刷新。如果我不使用或同时使用这两条线,它就不会,这对我来说似乎很奇怪。
我基本上只是将 JPanel 放在 JDesktopPane 中的 JInternalFrame 中。我正在尝试做的事情有两个主要功能。一个添加新的 JPanel,另一个尝试刷新它,以便新数据显示:
public void addNewSP()
{
sp = new JInternalFrame("SP");
sp.setClosable(true);
sp.setLocation(700, 400); //this should be changed to something based on screen size
sp.setResizable(true);
sp.add(popUp);
this.parentContainer.add(sp, JLayeredPane.DRAG_LAYER);
sp.pack();
sp.show();
sp.setSize(500, 500);
sp.setPreferredSize(new Dimension(500, 500));
}
public void refreshSP()
{
sp.repaint();
sp.validate();
sp.repaint();
sp.validate();
parentContainer.validate();
parentContainer.repaint();
sp.setSize(sp.getSize().width, sp.getSize().height+1);
sp.setSize(sp.getSize().width, sp.getSize().height-1);
}
}
BTW parentContainer 是 JDesktopPane