【问题标题】:Transparent JFrame透明 JFrame
【发布时间】:2015-09-29 11:42:41
【问题描述】:

我有一个包含 JPanel 的 JFrame。我想让框架完全透明,面板稍微透明。

我正在使用以下代码:

frame.setBackground(new Color(0, 0, 0, 0));
panel.setBackground(new Color(51, 51, 51, 190));

达到了预期的效果,但是,当我使用此方法使 JFrame 透明时,它会扭曲所有其他组件。

下图比我能解释的更好。

左边是一个没有透明度的例子,文字清晰。右边的面板和框架是用上面的代码设置的,文字是扭曲的。

我错过了什么?

【问题讨论】:

  • 不要在组件中使用基于 alpha 的颜色(对框架有效),相反,您需要使用 setOpaque(false) 并覆盖面板的 paintComponent 方法并伪造它
  • 对于exampleexample
  • 当 MadProgrammer 的解决方案无济于事时,可能要显式关闭字体抗锯齿功能。之前调用 super.paintComponent 左右Graphics2D.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
  • 只有在我将颜色应用到框架时才会出现这种情况,并且只有在透明度小于255时才会出现这种情况。无论我是否将其应用到面板上,文本仍然会扭曲。我可以使用 frame.setBackground(new Color(0, 0, 0, 255)) ,这很好。我可以使用 panel.setBackground(new Color(0, 0, 0, 0)) ,这很好。一旦我使框架透明(例如使用 frame.setBackground(new Color(0, 0, 0, 254))),它就会扭曲。
  • 这实际上是一个 JDialog,而不是 JFrame - 抱歉。这有什么变化?

标签: java swing jframe transparency


【解决方案1】:

但是,当我使用此方法使 JFrame 透明时,它会扭曲所有其他组件。

问题是 Swing 认为组件是不透明的,所以它不会先绘制背景,所以你会得到绘制工件。

查看Background With Transparency。它有两个简单的解决方案:

  1. 自己绘制背景
  2. 使用包装容器为您完成绘画

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多