|----------------------------|
|   Panel1                   |
|----------------------------|
|        |                   |
|        |                   |
|        |                   |
| Panel2 | Panel3            |
|        |                   |
|        |                   |
|        |                   |
|        |                   |
|--------|-------------------|
|          Panel4            |
|----------------------------|各位智者大侠们,小弟刚入门学习java,我想设计上图这样的一个界面,用javax.swing包,Panel2和Panel3之间要用JSplitPane分割,并且要求Panel1的大小为(300,50),Panel2的大小为(100,200),Panel3的大小为(200,200),Panel4的大小为(300,50)。
请问我该采用什么什么布局?
最初我使用BorderLayout,好像无法解决精确设置EAST,SOUTH,NORTH长宽的问题。
后来试着用FlowLayout,因刚入门,也无法解决,请各位大侠赐教,最好贴出代码!谢谢了,小弟50分奉上!

解决方案 »

  1.   

    BorderLayout应该可以实现。通过设置PreferredSize应该可以实现panel1.setPreferredSize(new Dimension(300,50));
    splitPane.setDividerLocation(100);
    panel3.setPreferredSize(new Dimension(300,50));
      

  2.   

    谢谢楼上的热心帮助,那在用splitPane分割panel2和panel3时应该怎么做呢
    再加上
    JSplitPane jspHor;
    jspHor=new JSplitPane(JSplitPane.VERTICAL_SPLIT,panel2,panel3);
    这样还是实现不了上面的界面阿
      

  3.   

    答:什么都不需要.参考代码如下:(就是你要的效果:精确定位与大小)import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class JFrameLayout extends JFrame{ private Container cp;
    private JPanel p1,p2,p3,p4;

    public JFrameLayout()
    {
    cp=this.getContentPane();

    p1=new JPanel();
    p2=new JPanel();
    p3=new JPanel();
    p4=new JPanel();


    cp.setLayout(null);//精确布局
    p1.setSize(300, 50);
    p1.setLocation(0, 0);
    p1.setBackground(Color.blue);

    p2.setSize(100, 200);
    p2.setLocation(0, 50);
    p2.setBackground(Color.green);

    p3.setSize(200, 200);
    p3.setLocation(100, 50);
    p3.setBackground(Color.red);

    p4.setSize(300, 50);
    p4.setLocation(0, 250);
    p4.setBackground(Color.cyan);


    cp.add(p1);
    cp.add(p2);
    cp.add(p3);
    cp.add(p4);



    this.setTitle("JFrame布局");
    this.setSize(300, 335);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    this.setVisible(true);
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
        new JFrameLayout();
    }}
      

  4.   

    答:是因为JSplitPane分割是多余的(楼主想用它达到布局效果--因为:若要用它,则:Panel2的大小为(100,200),Panel3的大小为(200,200) 的大小指定就是无意义的了--因为分隔条可随时移动改变分隔大小).
      

  5.   

    JSplitPane.setPreferredSize(300,200);
    JSplitPane.setDividerLocation(100);不过还得设置JFrame.setSize(300,300);不然界面会被拉伸的。想问一下,panel2、panel3是指初始化大小,还是说就是不能变化了?
      

  6.   

    非常感谢楼上各位的热心帮助
    panel2和panle3是初始化时的大小,panel2和panel3之间需要有JSplitPane分割的
    能帮忙解决以下么?
    今晚结贴,再次谢谢各位的帮助!
      

  7.   

    import java.awt.BorderLayout;
    import java.awt.Dimension;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;public class JFrameLayout extends JFrame { private JPanel p1, p2, p3, p4; public JFrameLayout() { p1 = new JPanel();
    p2 = new JPanel();
    p3 = new JPanel();
    p4 = new JPanel(); p1.setPreferredSize(new Dimension(300, 50)); JSplitPane jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, p2, p3);
    jsp.setDividerLocation(100); p4.setPreferredSize(new Dimension(300, 50)); getContentPane().add(p1, BorderLayout.NORTH);
    getContentPane().add(jsp);
    getContentPane().add(p4, BorderLayout.SOUTH); this.setSize(300, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    } public static void main(String[] args) {
    new JFrameLayout();
    }
    }真晕,都说得够明白的了
      

  8.   


    如果不要拉动的话,
    加一句话也行 jsp.setEnabled(false);