【问题标题】:JLabel over transparent painted Rectangle?JLabel 在透明绘制的矩形上?
【发布时间】:2011-07-11 00:16:05
【问题描述】:

我将 JWindow 的背景设置为完全透明。然后我在它的paint-Method 中绘制了一个圆角矩形(RGB:0,0,0,100),并在JWindows ContentPane 中添加了一个JLabel。但是当我尝试重新绘制 JWindow 以更新 JLabel 时,它不会删除旧的 Rectangle 和 JLabel 的旧值。所以结果是我的自定义工具提示框(它应该是什么)变得不那么透明,并且您无法读取 JLabels 内容,因为它覆盖了旧的内容。

有没有办法解决这个问题?

顺便说一句,如果我不重新绘制,它不会变得不那么透明,但是当我重新绘制时,我的 JLabel 的新内容会覆盖旧内容。

【问题讨论】:

    标签: java transparency paint repaint jwindow


    【解决方案1】:

    首先您应该覆盖paintComponent 而不是paint 并调用super.paintComponent(g)。你应该让 JWindow 不透明,因为最后一层的组件会清除旧的内容。如果所有图层都是透明的,您最终会出现屏幕垃圾。

    painting with Swing。也许你真的想创建translucent windows

    【讨论】:

    • 是的,我想创建半透明窗口,但我认为它不适用于 Mac OS 10.6.6。
    • JWindow 没有paintComponent(Graphics g),但它有paintComponents(Graphics g)。但是当我覆盖它时它不会画任何东西?
    • 我认为内容窗格是JPanel,因此您可以将内容绘制设置为您自己的自定义JPanel 并覆盖paintComponent()。问题“如何在 Mac OS 上创建半透明窗口?”绝对值得向 IMO 询问。
    • 您可能对此感兴趣:translucent-swing-windows-on-mac-os-x
    猜你喜欢
    • 2016-05-25
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多