如何在不影响原始JPanel的情况下更改JPanel属性?

时间:2013-03-04 10:22:21

标签: java swing background pdf-generation jpanel

我有一个Java桌面应用程序,在某些时候会显示带有GridBagLayout的JPanel和网格内的其他JPanel。这个JPanel显示有一定的颜色。我想要的是将这个JPanel导出为另一种颜色的PDF(我使用的是iText)。 导出没问题(PDF是用原始颜色的JPanel生成的)但是我不确定在PDF上更改JPanel颜色的正确方法。

我的第一种方法是将原始JPanel的背景颜色设置为打算在PDF上显示的颜色。我有一个实用类,用一个接收JPanel的方法生成我的PDF,在这个方法上,我创建了jPanel.setBackgroundColor。这样可行,但问题(对大多数人来说可能很明显)是它还改变了应用程序上显示的原始JPanel。我认为调用此方法传递JPanel将是Java pass-by-value。经过一些阅读,我现在明白它确实是一个值传递,但指向对象JPanel的指针的值,而不是真正的对象,从而改变了它的属性,也改变了原始值。

另一种方法是克隆原始的JPanel。但后来注意到JPanel不是Cloneable。还想到在新的JPanel上重新创建原始的JPanel,但它变得太复杂了。

所以我想就哪种方法去寻找合适的方法。

非常感谢你。

干杯!

1 个答案:

答案 0 :(得分:1)

一个简单但略有不同的解决方案是在面板上显示另一个面板,然后再打印它。 如果使用不同的Panel进行GUI和打印,则可以使用两种不同的背景颜色(以及不同的其他设置)。 当然,这不是对所述问题的严格解决方案,但可能是一个相当好的解决方法。