A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张 涛 中级黑马   /  2012-9-9 09:59  /  2177 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张 涛 于 2012-9-23 07:25 编辑

程序如下:
  1. import java.awt.*;

  2. public class TestPanel {
  3. public static void main(String[] args){
  4. int w = 500;
  5. int h = 300;

  6. Panel p1 = new Panel();
  7. p1.setBounds(w/5,h/5,30,30);
  8. p1.setBackground(Color.BLACK);//设置黑色

  9. Panel p2 = new Panel();
  10. p2.setBounds(w/5*4,h/5,30,30);
  11. p2.setBackground(Color.BLACK);//设置黑色

  12. Panel p3 = new Panel();
  13. p3.setBounds(w/2,h/2,40,60);
  14. p3.setBackground(Color.YELLOW);//设置黄色

  15. Panel p4 = new Panel();
  16. p4.setBounds(w/2,h/4*3,30,30);
  17. p4.setBackground(Color.PINK);//设置粉丝

  18. Frame f = new Frame("myFrame");

  19. f.add(p1);
  20. f.add(p2);
  21. f.add(p3);
  22. f.add(p4);

  23. f.setBounds(0,0,w,h);
  24. f.setBackground(Color.WHITE);//设置白色,白色效果未出现
  25. f.setVisible(true);
  26. }
  27. }
复制代码
效果如图:
问题:最后设置的白色效果未出现,背景是粉色。如果把上面设置粉丝的代码去掉,最后的背景又变成了黄色。frame设置的背景色一直未出现,这是怎么了?

c.png (20.02 KB, 下载次数: 32)

程序效果

程序效果

3 个回复

倒序浏览
本帖最后由 李京 于 2012-9-9 10:41 编辑

先发张效果图 不知道楼主是不是想实现这样的。
  1. Frame f = new Frame("myFrame");
  2. f.setLayout(null);    <FONT color=red>和楼主的不同之处就在于这一行代码。</FONT>
  3. f.add(p1);
  4. f.add(p2);
  5. f.add(p3);
  6. f.add(p4);

  7. f.setBounds(0,0,w,h);
  8. f.setBackground(Color.WHITE);//设置白色,白色效果未出现
  9. f.setVisible(true);
复制代码
未设置Layout时,java默认为flowLayout布局的,最后一个添加的组件会居中而且原设置位置和原设置大小都无效。
所以要在实例化Frame之后设置setLayout。
回复 使用道具 举报
李京 发表于 2012-9-9 10:08
先发张效果图 不知道楼主是不是想实现这样的。未设置Layout时,java默认为flowLayout布局的,最后一个添加 ...

flowLayout布局,为什么会把最后一个添加的组件居中?

而这和颜色有什么关系?

回复 使用道具 举报
张 涛 发表于 2012-9-9 18:25
flowLayout布局,为什么会把最后一个添加的组件居中?

而这和颜色有什么关系?

我回答的时候查了很多,但是也回答不出来为什么  只能说 就这样用吧,记住就行了。
你去看一下毕老师的GUI第二部,那个上面也这样的例子,但是他也没说为什么。

这个代码会使用P4的 setBackground,会把这个设置设置成Frame的Background
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马