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

标签 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 值传递。经过一番阅读,我现在明白了,它确实是一个值传递,但是指向对象JPanel的指针的值,而不是真正的对象,因此改变了它的属性,也改变了原来的。

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

所以我想就正确的方法发表一些意见。

非常感谢您。

干杯!

最佳答案

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

关于java - 如何在不影响原始 JPanel 的情况下更改 JPanel 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15199284/

相关文章:

CSS 淡化顶部和底部 "borders"

java - 在 Fragments Android 中使用 ConstraintLayout 时的空 UI

java - 如何在 JTable 单元格中追加文本

java - Java6 中对象 <String> 的通配符

ios - 导航栏和 View 的整个图像

browser - 跨浏览器 CSS3 转换解析错误

java - 从 angularJs 调用 java Controller

java - Spring Boot 中的自定义 JWE 过滤器阻止 CORS 选项请求

java - JPassword 字段和用户名字段(登录系统)未显示

java - 如何在 NetBeans 项目中显示 JFreeChart