[英]Paint hidden Java swing component
我尝试将组件绘制为PDF。 我有itextpdf 4.2,一切正常。 但这仅在我使尝试渲染的帧可见时才有效。
我发现的类似问题是如何在其他地方绘制不可见的JFrame? 存在相同的问题,但未提供解决方案。
一些代码。 我创建了一个JFrame并插入要渲染的主视图 。
JFrame jframe = new ShowingFrame();
jframe.setPreferredSize(new Dimension(PDFHelper.getOriginalWidth().intValue(), PDFHelper.getOriginalHeight().intValue()));
jframe.setMinimumSize(new Dimension(PDFHelper.getOriginalWidth().intValue(), PDFHelper.getOriginalHeight().intValue()));
jframe.add(view);
jframe.setUndecorated(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setState(Frame.ICONIFIED);
jframe.setState(Frame.NORMAL);
//jframe.setVisible(true);
如果我取消注释jframe.setVisible(true)
,那么一切正常。 但是用户会看到我要避免的框架。
所以问题是:如何绘制隐藏的控件?
在Swing Component.java类中,所有绘制方法首先检查该组件是否可见:
public void paint(Graphics g) {
if (isShowing()) {
// rest of the code...
}
}
我试图创建继承类ShowingFrame extends JFrame
,该类重写isShowing并始终返回true。 但这无济于事。
对Swing(和Java Graphics API)进行了优化,以尽快停止渲染。
因此,解决方案是创建一个BufferedImage
,从中获取Graphics
实例,然后调用component.paint(g);
用它。
现在,您有了一个选项卡组件。 尝试获取选项卡的内容,而不是呈现选项卡本身。 如果这不起作用,则可以尝试克隆子代树,创建新的JPanel
,附加子代并呈现结果。 但是,如果模型表现不佳,则克隆会变得乏味。
请参见以下问题的一些代码: Swing:获取JFrame的图像
为什么要画一些看不见的东西? 您的计算机不想浪费CPU周期渲染无法看到的图形。 实际上,为了查看每个窗口的哪些部分可见并且仅绘制可见部分(所谓的剪辑窗口),已经进行了大量计算。
如果要绘制某些内容以便以后使用或保存,则可以始终创建所需大小的BufferedImage
并进行绘制。
如果我取消注释jframe.setVisible(true),那么一切正常。 但是用户会看到我要避免的框架。
您可以设置框的位置,使其在屏幕上不可见。 也许像这样:
frame.pack();
Dimension d = frame.getSize();
frame.setLocation(-d.witdh, 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.