java 里面的Jpanel.setlayout(null)

packagekezhong;importjava.awt.BorderLayout;importjava.awt.Color;importjavax.swing.JBu... package kezhong;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestSwing {

public JFrame jf = new JFrame();
public JPanel jpn = new JPanel();
public JPanel jps = new JPanel();
public JButton jb = new JButton("chenhui");

public TestSwing(){
jpn.setLayout(null);
jf.add(jpn,BorderLayout.NORTH);
jpn.setBackground(Color.black);
jb.setBounds(10, 10, 100, 20);
jpn.add(jb);
jf.setSize(300,300);
jf.setVisible(true);
}
public static void main(String[] args) {
new TestSwing();

}

}

这个程序为什么 JButton 消失了 不要说把jpn.setLayout(null)去掉啊 要是能去掉我就不问了
如果把里面的 jf.add(jpn,BorderLayout.NORTH); 改成jf.add(jpn,BorderLayout.CENTER); 就可以了 为什么?在线等。
展开
 我来答
jiest1986
2009-03-07 · TA获得超过3432个赞
知道小有建树答主
回答量:1013
采纳率:0%
帮助的人:1121万
展开全部
这个问题如果对BorderLayout的原理不理解是很难解释的

出现这个问题的主要原因是由于jpn的布局方式,假设一个容器的布局方式设置为null的话,如果没有显示的调用setPreferSize()方法,那么的首选大小为(0,0)。根据BorderLayout,North组件的高度受到其本身的PreferSize的Heigth控制,由于这里是0,所以布局计算出来jpn的高度为0,展示出来就看不到jpn,所以就看不见。
如果为center事情就完全不一样了,可以看出中间组件高度,整个高度-TOP的PreferSize-Bottom的Prefersize,宽度计算原理一样。本例中,BorderLayout的组件上下左右均无组件,所以中间组件的大小为整个容器的大小。所以是把jpn平铺在整个容器中,所以是可见的。

说了这么多,不知道你能否明白。还有什么不懂,可以参见BorderLayout的源代码中的layoutContainer方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
_kkrsoo_
2009-03-07 · TA获得超过782个赞
知道小有建树答主
回答量:226
采纳率:0%
帮助的人:0
展开全部
这样做你觉得可以吗:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Print {

public JFrame jf = new JFrame();
public JPanel jpn = new JPanel();
// public JPanel jps = new JPanel();
public JButton jb = new JButton("chenhui");

public Print() {
jf.setLayout(null);
jpn.setLayout(null);
jpn.setBounds(20,20,200,100);
jpn.setBackground(Color.blue);

jb.setBounds(10, 10, 100, 20);
jpn.add(jb);
jf.getContentPane().add(jpn);//JFrame加组件用这个方法
// jf.add(jpn, BorderLayout.NORTH);

jf.setSize(300, 300);
jf.setVisible(true);
}

public static void main(String[] args) {
new Print();

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式