JFrame包含很多pane
从上往下
glasspane
contentpane
layeredpane
rootpane
看下代码:import java.awt.*;
import javax.swing.*;public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Component p = frame.getGlassPane();
        Container pp = frame.getContentPane();
        JLayeredPane ppp = frame.getLayeredPane();
        JRootPane pppp = frame.getRootPane();
        //((JComponent)pp).setOpaque(false);        //1
        //pppp.setOpaque(false);            //2
        p.setBackground(Color.YELLOW);
        pp.setBackground(Color.BLACK);
        ppp.setBackground(Color.GREEN);
        pppp.setBackground(Color.BLUE);
        frame.setBackground(Color.RED);
        frame.setSize(100, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}运行结果显示的是黑色,这是因为glasspane是透明的,contentpane不透明
将一句的注释去掉,让contentpane透明,这时候看到的颜色是蓝色
因为layeredpane透明,rootpane不透明
将2句的注释也去掉,让rootpane透明,并没有得到期望的红色
而是白色,好像还有至少一层东西在frame之上
白色这层是什么,看了会源码也没找到
希望高手解答

解决方案 »

  1.   


    我的java版本是
    java version "1.5.0"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
    Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)
    难道是版本的问题,注释的句子也执行的话出来的是白色
      

  2.   

    2个注释掉  黑哒
    2个加上  红哒java version "1.6.0_14"
    Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
    Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)
      

  3.   

    那可能是我这里的原因了
    可能是我操作系统(vista)的一些原因
    我明天找个XP的看一下
    谢谢了啊
      

  4.   

    晕了,我的也是白的。。  我的是myeclipse 6.5
      java version "1.6.0_02"
    Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
    Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing)
      

  5.   

    找了一个同学XP的机子和我java版本一模一样
    运行出来也是白的 看来不是操作系统的问题了用一台XP的机子 java版本
    java version "1.6.0_13"
    Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
    Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
    是红的 怀疑还是版本的问题谢谢大家了