先看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變成了透明效果。