一个JFrame容器中究竟可以加几个JPanel容器?有的书上说是可以加好多个的,可是小弟昨天发现如果直接添加JPanel容器到JFrame容器中的话,就会发生容器覆盖的问题。请问这究竟是怎么回事?还有啊,关于这两个容器的区别我也不是很清楚。
前几天听人说,JFrame容器是顶级容器,JPanel不是,但是JFrame容器不能直接添加大部分组件,必须借助2级容器JPanel的帮助。但是小弟今天又在书上看到这样的代码:import javax.swing.JFrame;
import javax.swing.JButton;
public class Jframe{Jframe(){
    JFrame  jf=new JFrame("my frame");
    JButton b=new  JButton("my button1" );
    
     jf.add(b);
     
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);}
public static void main(String[] args){new Jframe();
}
}
请问,JFrame容器到底可以直接加JButton组件吗?还有,如果我想在一个JFrame容器内加两个JPanel容器不让他们相互覆盖,该怎样做呢?小弟在线等大神回答

解决方案 »

  1.   

    我也是新学swing的:import javax.swing.*;
    import java.awt.GridLayout;public class Jframe {  Jframe() {
        GridLayout layout = new GridLayout(1, 2);
        JFrame jf = new JFrame("my frame");
        jf.setBounds(100, 100, 200, 100); //大小坐标还是搞一个吧
        JButton b1 = new JButton("my button1");
        JButton b2 = new JButton("my button2");
        jf.getContentPane().setLayout(layout); //可以先设置下布局,这里是1行2列
        jf.getContentPane().add(b1); //往jf里面放东西,先取它的贴身容器,就好像电饭煲的里面那层。那才是装东西的。
        jf.getContentPane().add(b2);    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);  }  public static void main(String[] args)  {
        new Jframe();
      }}
      

  2.   

    看看布局管理器 left right top bottom 可以共存的
      

  3.   

    首先告诉你JFrame里面是可以直接添加控件的。不过一般是放一个JPanel进去。所有的控件放到Jpanel中。
    一个JFrame中可以添加N个JPanel的。不覆盖你要为容器设置布局。有流布局,卡片布局……等等。你根据自己的想要的效果来设定布局。
    public class Test {
    public static void main(String [] args){
    JFrame frame=new JFrame("我是最大的");
    frame.setVisible(true);
    frame.setSize(400,300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p1=new JPanel();
    JButton bt=new JButton("我是JFrame上的Button");
    p1.add(new JButton("我是第一个面板"));
    JPanel p2=new JPanel();
    p2.add(new JButton("我是第二个面板"));
    frame.setLayout(new GridBagLayout());
    Border border1 = BorderFactory.createEtchedBorder(EtchedBorder.RAISED, Color.white, new Color(165, 163, 151));

    Border border2 = new TitledBorder(border1, "num1"); //模块号
    Border border3 = new TitledBorder(border1, "num2"); //BSC局向

    p1.setBorder(border2);
    p2.setBorder(border3);

    frame.add(p1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
                    GridBagConstraints.BOTH, new Insets(2, 5, 2, 5), 0, 0));
    frame.add(p2,new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
                    GridBagConstraints.BOTH, new Insets(2, 5, 2, 5), 0, 0));
    frame.add(bt,new GridBagConstraints(0, 1, 1, 2, 0.0, 0.0, GridBagConstraints.NORTHWEST,
                    GridBagConstraints.NONE, new Insets(2, 5, 2, 5), 0, 0));
    }
    }
      

  4.   

    JFrame是顶层容器,小控件都可以直接加在上面。
    至于JPanel问题,看一下布局管理器吧。
      

  5.   

    个人认为,JFrame这类的,你可以上网下一个可以图形界面插件,在里面拖拖拉拉,就好了,然后也可以在后台给代码,这样又节省时间,又提高效率,而且又不容易错
      

  6.   

    JPanel是可以嵌套的,顶层就一个。java可以拖拖拉拉图形界面插件都很烂,没个好用的。
      

  7.   

    使用布局管理器。不过GUI将来很少用,了解即可
      

  8.   

    先把布局弄好,就可以添加多过JPanel
      

  9.   

    请参看setLayout方法,布局管理器