先看API:
public void setOpaque(boolean isOpaque)
如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。
对于 JComponent 而言,此属性的默认值是 false。但是对于大多数标准的 JComponent 子类(如 JButton 和 JTree),此属性的默认值与外观有关。
参数: isOpaque - 如果此组件应该是不透明的,则为 true
Opaque是不透明的意思,当设置为false时,组件是透明的,可显示下方的组件。下面是测试用例:
import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JPanel; /* * 2015-06-15 */ public class SetOpaqueDemo extends JFrame { public SetOpaqueDemo() { super("setOpaqueDemo"); setSize(400, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); //不透明,看到黑色顶层 JPanel opaquePanel = createNested(true); //透明,露出白色底层 JPanel notOpaque = createNested(false); getContentPane().setLayout(new FlowLayout()); getContentPane().add(opaquePanel); getContentPane().add(notOpaque); } public JPanel createNested(boolean opaque) { JPanel outer = new JPanel(new FlowLayout()); JPanel inner = new JPanel(new FlowLayout()); //底层panel为白色,顶层为黑色 outer.setBackground(Color.white); inner.setBackground(Color.black); inner.setOpaque(opaque); inner.setBorder(BorderFactory.createLineBorder(Color.gray)); inner.setPreferredSize(new Dimension(40, 20)); outer.add(inner); return outer; } public static void main(String[] args) { SetOpaqueDemo setOpaqueDemo = new SetOpaqueDemo(); setOpaqueDemo.setVisible(true); } }
运行效果如下图所示:
运行效果图
可见,setOpaque(false)使panel变成了透明效果。