为什么这个java程序创建出来的窗口颜色显示不出来?

package窗口;importjava.awt.*;importjavax.swing.*;publicclassWindow2extendsJFrame{privat... package 窗口;

import java.awt.*;

import javax.swing.*;

public class Window2 extends JFrame{

private Container cp;
private JButton jb;

public Window2(){
setSize(300,200);
setLocation(100,100);
setLayout(null);
setBackground(Color.lightGray );
setForeground(Color.orange );
cp=this.getContentPane();
init();
}
public void init(){
jb=new JButton("单击我");

jb.setBounds(100,80,200,40);
jb.setForeground(Color.CYAN );
jb.setFont(new Font("黑体",Font.BOLD ,20));
cp.add(jb);
}
public static void main(String[] args){
new Window2().setVisible(true);
}

}
展开
 我来答
雪飞潇潇
推荐于2018-04-04 · TA获得超过6275个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:876万
展开全部

因为JFrame分为几层RootPane     LayeredPane     ContentPane    GlassPane

其中GlassPane是透明的。

所以设置背景色,一般就设置在ContentPane上才能显示。

所以背景颜色代码修改成

getContentPane().setBackground(Color.lightGray);

效果图

更多追问追答
追问
你好。我想问下这句cp=this.getContentPane();生成内容面板之后背景颜色没加进去吗?
追答

setBackground(Color.lightGray  );这句话把颜色给了RootPane和LayeredPane。

而ContentPane这一层在上面,完全挡住了底下的两层。

所以你后面的cp=this.getContentPane();跟RootPane和LayeredPane没有啥关系。


代码片段,用于测试输出颜色

setBackground(Color.RED);//红色的rgb比较好认r=255 g=0 b=0
setForeground(Color.orange);
cp = this.getContentPane();
//cp.setBackground(Color.BLUE);
init();
System.out.println("RootPane的颜色\t"+getRootPane().getBackground());//255 0 0
System.out.println("LayeredPane的颜色\t"+getLayeredPane().getBackground());//255 0 0
System.out.println("ContentPane的颜色\t"+getContentPane().getBackground());
System.out.println("GlassPane的颜色\t"+getGlassPane().getBackground());
御绿戎0EY
2017-05-08 · TA获得超过3.8万个赞
知道大有可为答主
回答量:2.7万
采纳率:38%
帮助的人:1331万
展开全部
因为JFrame窗口,其实从下到上分为好几层:RootPane LayeredPane ContentPane GlassPane
其中最上面的GlassPane是透明的。所以设置背景色,需要设置在ContentPane上才能显示。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式