先不多说,发个代码:
import javax.swing.*;
public class test {
public static void main(String [] args)
{
JFrame jf = new JFrame();
                //自定义的jf的坐标和大小,保证jf一直在屏幕中央,且大小为屏幕一半大,我屏幕1280*760,好像吧
Coord_And_Size._profun_DefaultCenterAndHalf(jf);
jf.setVisible(true);
JPanel jp = new JPanel();
jf.add(jp);
JButton jb = new JButton();
jb.setSize(300, 200);//这里jb设置了大小
jp.add(jb);
}
}
注意: 这里jb设置了大小,而且设置的好大哦 !!!
但是,却没有改变一丝丝的jb大小,为什么 ?此时,再看一个代码import javax.swing.*;
public class test {
public static void main(String [] args)
{
JFrame jf = new JFrame();
                //自定义的jf的坐标和大小,保证jf一直在屏幕中央,且大小为屏幕一半大,我屏幕1280*760,好像吧
Coord_And_Size._profun_DefaultCenterAndHalf(jf);
jf.setVisible(true);
JButton jb = new JButton("第二次");
jf.add(jb);
}
}
和上一个代码不一样,我没有在jf(即JFrame)中放入jp(即JPanel),直接把jb(即JButton)放入jf,
我没有设置jb大小,jb却占领了整个屏幕,为什么?问:
两种不同的情况,搞得我好烦,可弄不出个所以然来,求教了,各位!

解决方案 »

  1.   


    布局情况的影响而已,后一种情况JFrame的布局方式貌似默认的方位布局
    (东、南、西、北、center)默认是居中的,控件会盛满至于具体什么情况,楼主还是得去了解下Swing的布局
      

  2.   


    JFrame默认布局为BorderLayout,JPanel默认为FlowLayout .
    如果说jf的确是填满的话 ... 
    jp里面添加jb (即:jp.add(jb) )改变不了jb的大小,我就想不通了,问题在这里 .可否解释下,解我疑惑 ?
    【注:上面代码中Coord_And_Size._profun_DefaultCenterAndHalf(jf)是我自定义的,这步代码看官可自行改掉】
      

  3.   

    你要设置jbutton的大小的话,jpanel的布局应该设为null
    之后对jbutton设定大小,并且指定其坐标的位置(相对jpanel)
    package com.kiritor;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class MyFrame extends JFrame { private JPanel jPanel ;
    private JButton button ;
    public MyFrame() {
    jPanel = new JPanel();
    button = new JButton("按钮");
    jPanel.setLayout(null);//要对控件设置大小,父容器布局方式为null
    jPanel.add(button);
    button.setBounds(60,10,80,40);//button的坐标和大小
    this.add(jPanel);
    this.setSize(200, 100);
    this.setLocationRelativeTo(null);//center
    this.setVisible(true);

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

  4.   


    呵呵,这样解决倒是不错 。
    不过,我还是有两个疑惑:1、为什么在FlowLayout里面没办法setSize() ?
    2、由于swing是带有布局管理的Componenet,所以用布局管理器应该比 绝对布局 好点,
      那么我非要在JPanel里面设置jb大小而不改变JPanel,有否可行的思路呢?求解惑 ... 提前先谢谢你 ...
      

  5.   

    1、FlowLayout自动控制控件的大小和位置
    2、貌似是有点困难呢
      

  6.   

    jp.setLayout(null);
    要先将jpanel的布局管理器设置为Null,然后你就可以设置JButton的大小了,可以试试!
      

  7.   

    布局管理器,就是管理你的布局的,在布局管理器不是null的情况下你对你的控件进行的某些的操作会被他(布局管理器)给覆盖的,有个方倒是可是设置大小  getPreferredSize() 这个方法可以完成你的需求。