Swing-setOpaque()用法-入门

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

posted on 2015-06-15 22:06  pzy4447  阅读(8211)  评论(0编辑  收藏  举报