【问题标题】:How to change a JPanel property without affecting the original JPanel?如何在不影响原始 JPanel 的情况下更改 JPanel 属性?
【发布时间】:2013-03-04 10:22:21
【问题描述】:

我有一个 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,但它变得太复杂了。

所以我想对哪种方法是正确的方法提出一些意见。

非常感谢您。

干杯!

【问题讨论】:

  • 在转换时更改颜色然后在完成后返回原始颜色是否可以接受(桌面用户界面中可能有轻微闪烁)?或者在转换时移除面板,也许用缓冲图像填充它的区域?

标签: java swing background pdf-generation jpanel


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2014-05-30
    • 2020-02-09
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多