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); 就可以了 为什么?在线等。 展开
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); 就可以了 为什么?在线等。 展开
展开全部
这个问题如果对BorderLayout的原理不理解是很难解释的
出现这个问题的主要原因是由于jpn的布局方式,假设一个容器的布局方式设置为null的话,如果没有显示的调用setPreferSize()方法,那么的首选大小为(0,0)。根据BorderLayout,North组件的高度受到其本身的PreferSize的Heigth控制,由于这里是0,所以布局计算出来jpn的高度为0,展示出来就看不到jpn,所以就看不见。
如果为center事情就完全不一样了,可以看出中间组件高度,整个高度-TOP的PreferSize-Bottom的Prefersize,宽度计算原理一样。本例中,BorderLayout的组件上下左右均无组件,所以中间组件的大小为整个容器的大小。所以是把jpn平铺在整个容器中,所以是可见的。
说了这么多,不知道你能否明白。还有什么不懂,可以参见BorderLayout的源代码中的layoutContainer方法。
出现这个问题的主要原因是由于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 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
展开全部
这样做你觉得可以吗:
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询