Java Swing窗口在BufferedImage与系统显示布局不一致问题求助
Swing窗口绘制到BufferedImage时布局异常问题
我创建了一个继承JFrame的SplashScreen窗口,采用GridBagLayout布局。将其绘制到BufferedImage时,布局与系统中实际显示的不一致——底部文本的垂直间距出现异常。
系统实际显示效果:
绘制到BufferedImage的效果:
该问题应该是时序问题而非布局类型导致的,我尝试了pack()、validate()等方法都无效,添加Thread.sleep(750)可以临时解决,推测是线程/时序相关的问题。现在寻求能让Swing完成布局后再绘制到图像的正确方法,以下是我使用的代码:
SplashScreen frame = new SplashScreen(); // extends JFrame frame.setDistributionStatement("<html>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<html>"); frame.setReleaseInformation("<html>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</html>"); frame.setProductName("Title"); BufferedImage image = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = image.createGraphics(); frame.pack(); // Not sure if this helps frame.validate(); // Not sure if this helps frame.setVisible(true); // Frame must be visible to paint frame.invalidate(); // Not sure if this helps frame.paintAll(g2d); // Paints to image
内容的提问来源于stack exchange,提问作者The Shoe Shiner
相关产品推荐
相关产品推荐

