定义了两个JPanel     p1,p2,然后设置p1的布局管理器为BorderLayout
然后设置p2的布局管理器为GridBagLayout   ,然后在p2上面加了一些组件
最后把p2加到p1上面去,即 p1.add(p2,BorderLayout.CENTER);
但是p2完全填充了p1的CENTER区域,我该怎么设置才能使p2按照我设置的大小显示
还有就是怎么才能在p1中精确定位p2的显示位置?
谢谢您的回答

解决方案 »

  1.   

    我所知道二个办法:一,把p1的布局设置成NULL,p1.setLayout(null);(好象是这样,不知道写错了没).然后你就可以把其它组件按你的大小放进去,不过这样就要先也一定要指定大小和位置,
    二,把布局设成FlowLayout,这样也会按你的大小或默认大小进去的。这样你也许就要多用点面板了才能定位好了。
    还有精确定位是不好的,一但你拉动窗口的大小你会发现组件排列超级变形了,不好看了(除非你设置成面板大小固定)
      

  2.   

    getContentPane().setLayout(null);然后在上面放别的东西
      

  3.   

    设置p1的setLayout(null),然后用setBounds(x, y, width, height)对p2进行坐标定位.再p1.add(p2).x和y是p2定位到相对p1的左上角的位置,width和height是p2的长和高.
      

  4.   

    同样这样定位啊,设置其它组件的setBounds()方法,把它定位到p1上,再p1,add(other),p1面板能放很多东西,又不是说在它上面放个p2后就不能再放其它东西了.要放面板和其它组件,只要把位置定好就行了.
      

  5.   

    import java.awt.*;
    import javax.swing.*;public class Test extends JFrame
     {
        JPanel p1;
        JButton btnP1 = new JButton();
        JPanel p2 = new JPanel();
        JButton btnP2 = new JButton();
        JTextArea txaInfo = new JTextArea();
        public Test() 
    {
            try
    {
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                init();
            }
    catch (Exception exception) 
    {
                exception.printStackTrace();
            }
        }    private void init() throws Exception
    {
            p1 = (JPanel) getContentPane();
            p1.setLayout(null);
            setSize(new Dimension(400, 300));
            setTitle("Frame Title");
            btnP1.setBounds(new Rectangle(42, 25, 142, 36));
            btnP1.setFont(new java.awt.Font("Dialog", Font.BOLD, 16));
            btnP1.setText("我在p1上");
            p2.setBorder(BorderFactory.createEtchedBorder());//特别在p2上设置个边框
            p2.setBounds(new Rectangle(92, 81, 223, 101));
            p2.setLayout(null);
            btnP2.setBounds(new Rectangle(49, 23, 132, 44));
            btnP2.setFont(new java.awt.Font("Dialog", Font.BOLD, 16));
            btnP2.setText("我在p2上");
            txaInfo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 16));
            txaInfo.setText("我也在p1上,p2加在p1上,加了边框的就是p2");
            txaInfo.setBounds(new Rectangle(46, 204, 309, 54));
            p1.add(btnP1);
            p1.add(p2);
            p1.add(txaInfo);
            p2.add(btnP2);
            this.setLocationRelativeTo(this);//窗口居中显示
            this.setVisible(true);
        }
    public static void main(String[] args)
    {
    new Test();
    }
    }
      

  6.   

    p1布局不用改
    建议加个p3 放进p1布局的center位置 再把p2和你要放的其他东西放在p3里 p3的布局看你需要了
    再建议你说的p2以外的其他东西也放在一个Panel里
      

  7.   

    package com.explor.topo.framework.menubar.InfoBar;import java.awt.Color;
    import java.awt.Dimension;import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public class test extends JFrame{
    test(){
    this.setLayout(null);
    JPanel jpanel1=new JPanel();
    jpanel1.setBorder(BorderFactory.createLineBorder(Color.red, 1));
    jpanel1.setBounds(10, 10, 200, 200);
    this.add(jpanel1);
    this.setSize(800,600);
    this.setVisible(true);
    }
    public static void main(String[] args) {
    new test();
    }
    }