JPanel 被称为不透明,这是什么意思?

5

在Swing中,JPanel被称为不透明的,这是什么意思?

另外,相对于不透明性,JPanel和JComponent有何区别?

如果可能的话,请用简单的术语解释,因为我在GUI编程方面经验不太丰富。

感谢您的帮助。

3个回答

12

在Swing中,Opaque有一个非常特定的含义 - 它意味着组件完全绘制其边界内的全部区域(请参见setOpaque javadoc)。

这主要用于确定是否需要重绘当前组件后面的组件。

  • 如果isOpaque为true,则不需要重新绘制组件后面的任何内容(因为它将被覆盖),因此背景绘制可能被省略作为优化。
  • 如果isOpaque为false,则表示该组件实现了一些透明效果 - 例如在中间绘制一个半透明窗口的组件,或者绘制一个非矩形组件。

如果您正在创建自己的JComponent,并将setOpaque设置为true,但未遵守合同(即,尽管声称是不透明的,但没有绘制边界内的全部区域),则由于背景未重新绘制,可能会得到意外的结果。


6

Opaque和Transparent是相反的词。

窗户、水或空气是透明的-你可以透过它们看到外面。

墙壁、泥土或混凝土是不透明的-你无法透过它们看到外面。

在GUI编程方面,JPanel和JComponent默认情况下都是不透明的。如果您将它们设置为透明,您可能不会看到太大的区别,因为底层的JFrame(或其他)通常与JPanel/JComponent具有相同的颜色。


1
当然,您对透明和不透明的一般含义是正确的,但其余部分是误导性的。在Swing中,不透明度是一个特殊标志,用于指示是否需要在组件后面进行背景绘制,它通常不会影响组件本身的呈现方式。 - mikera

2

JPanel 的不透明性可能是默认的,也可能不是。这取决于哪个版本的 PL&F 生效。 - Tom Hawtin - tackline
1
+1,教程总能给出比我们更完整的解释,而且你还可以学到一些其他有趣的知识。 - camickr
@camickr:说得好!我刚学到JPanel的不透明度取决于L&F! :-) - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接