swing 中对布局管理器的理解

liujun3512159 2010-03-03 10:06:04
代码:
package com.swing.book.five;

//这段代码主要是为读者展示如何使用BorderLayout布局管理器将组件进行布局
import javax.swing.*;
import java.awt.*;

public class test1 {
static final int WIDTH = 300;
static final int HEIGHT = 200;

public static void main(String[] args) {

JFrame jf = new JFrame("测试程序");
jf.setSize(WIDTH, HEIGHT);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
JPanel contentPane = new JPanel();
jf.setContentPane(contentPane);
JButton b1 = new JButton("生活");
JButton b2 = new JButton("工作");
JButton b3 = new JButton("睡觉");
JButton b4 = new JButton("购物");
JButton b5 = new JButton("饮食");
BorderLayout lay = new BorderLayout();// 创建一个布局管理器对象,将中间容器设置为此布局管理

jf.setLayout(lay);
//contentPane.setLayout(lay);

contentPane.add(b1, "North");// 将五个普通按钮组件分别按照东、南、西、北、中五个方位添加到中间容器中
contentPane.add(b2, "South");
contentPane.add(b3, "East");
contentPane.add(b4, "West");
contentPane.add(b5, "Center");
jf.pack();
}
}

这段代码很简单,只是有一点,我不是很理解
按照我的理解“布局管理器应该是针对内容面板的”
大家看下红色代码部分,
jf.setLayout(lay);
//contentPane.setLayout(lay);
我发现这2行代码任选一个,得到的程序效果是一样的
如果按照我的理解,代码应该用contentPane.setLayout(lay);
更加合理些。我不明白为什么用 jf.setLayout(lay);
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MSDN1990 2010-03-03
  • 打赏
  • 举报
回复
因为Frame继承自contentPane,所以frame也就有了setLayout属性了
py330316117 2010-03-03
  • 打赏
  • 举报
回复
默认的布局就是layout,所以你不设置布局也可以自动调用setlayout
focusforce 2010-03-03
  • 打赏
  • 举报
回复
意思当然不一样,关键是执行效果。就好比:
你向你爸爸的银行卡存1w元,跟你爸爸自己向他的银行卡存1w元的效果是一致的。他的银行卡里多了1w元。
liujun3512159 2010-03-03
  • 打赏
  • 举报
回复
按照1楼的意思,
jf.setLayout(lay);
contentPane.setLayout(lay);
这两个都是一样的效果
hy158753228 2010-03-03
  • 打赏
  • 举报
回复
同楼上,我准备让LZ将你的这段代码:jf.setContentPane(contentPane); 注释下的
focusforce 2010-03-03
  • 打赏
  • 举报
回复
看看JFrame的源代码:
public void setLayout(LayoutManager manager) {
if(isRootPaneCheckingEnabled()) {
getContentPane().setLayout(manager);
}
else {
super.setLayout(manager);
}
}
你在代码中设置了jf.setContentPane(contentPane);

ramparter 2010-03-03
  • 打赏
  • 举报
回复
JFram默认用BorderLayout
JPanel默认是FlowLayout

在FlowLayout.... EAST常量实际上是 SwingConstaints.EAST
SwingConstaints好像有很多Swing常用的常量,直接EAST也有对应的常量,,至于 North South有没有我就不知道了,没查过

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧