两种layout分别是GridLayout和BoxLayout。
同时用的时候,GridLayout会把BoxLayout挤到一边去。两个问题(请参照下面的代码,已调试),请问:
1。明明是给jp1分配GridLayout,为什么会出现这样的现象。
2。如果仍然混用GridLayout和BoxLayout的话,应该怎样写法?代码如下:
package layoutManagerTest;import java.awt.*;
import javax.swing.*;public class LayoutTest { public LayoutTest(){

JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(1,0));
jp1.add(new JButton("jp1"));
JPanel jp2 = new JPanel();
jp2.setLayout(new BoxLayout(jp2, BoxLayout.X_AXIS));
jp2.add(new JButton("jp2"));
JPanel jp3 = new JPanel();
jp3.setLayout(new BoxLayout(jp3, BoxLayout.X_AXIS));
jp3.add(new JButton("jp3"));
JPanel jpAll = new JPanel();
jpAll.setLayout(new BoxLayout(jpAll, BoxLayout.X_AXIS));
jpAll.add(jp1);
jpAll.add(jp2);
jpAll.add(jp3);

JFrame jf = new JFrame();
jf.setBounds(100, 100, 400, 200);
jf.add(jpAll);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] arg){
new LayoutTest();
}
}

解决方案 »

  1.   

    package com.test;import java.awt.*;import javax.swing.*;public class Test { public Test() { JPanel jp1 = new JPanel();
    jp1.setLayout(new GridLayout(1, 0));
    jp1.add(new JButton("jp1")); JPanel jp2 = new JPanel();
    jp2.setLayout(new BoxLayout(jp2, BoxLayout.X_AXIS));
    jp2.add(new JButton("jp2")); JPanel jp3 = new JPanel();
    jp3.setLayout(new BoxLayout(jp3, BoxLayout.X_AXIS));
    jp3.add(new JButton("jp3")); JPanel jpAll = new JPanel();
    jpAll.setLayout(new GridLayout(1, 2));
    jpAll.add(jp1);
    jpAll.add(jp2);
    jpAll.add(jp3); JFrame jf = new JFrame();
    jf.setBounds(100, 100, 400, 200);
    jf.add(jpAll);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } public static void main(String[] arg) {
    new Test();
    }
    }
    这样是你想要的效果吗?
      

  2.   

    我想要的效果是三个按钮平分整个frame,且三个按钮分别在3个panel(jp1,jp2,jp3)的中央。
    另外,还是希望混用gridlayout和boxlayout,因为比较好奇这点。
    这只是个例子,我实际的程序中,左边的panel中的控件是按照行列来摆放的。中间和右边的panel中的控件都放在一行里,所以如果三个panel都用gridlayout也是可以的。只要达到效果就好。求助!
    再有,是不是用了layout之后,就不能改变控件在panel中的位置和大小了?比如setsize之类的,即使设置了也没有效果。这一点也请解答一下吧!
    感谢!
      

  3.   

    按你的说法如果把gridlayout 和 boxlayout 都用上应该出不来你想要的效果。还有,用布局之后就不能设置位置了,不过你可以往上面再添加面板,设成null布局,然后再在null布局中设置绝对位置。
    面板上可以无限放面板希望你的问题能顺利解决
      

  4.   

    帮你写了段代码,不知道是不是你想要的效果:import java.awt.Color;
    import java.awt.GridLayout;
    import java.awt.*;
    import javax.swing.*;
    public class TestButton extends JFrame{

    private static final long serialVersionUID = 1L;

    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();
    JPanel p4 = new JPanel();
    JButton b1 = new JButton("Button1");
    JButton b2 = new JButton("Button2");
    JButton b3 = new JButton("Button3");

    public TestButton(){

    this.add(p1);
    p1.setLayout(new GridLayout(1,3));
    p2.setLayout(new BorderLayout());
    p2.add(b1,BorderLayout.CENTER);
    p3.setLayout(new BorderLayout());
    p3.add(b2,BorderLayout.CENTER);
    p4.setLayout(new BorderLayout());
    p4.add(b3,BorderLayout.CENTER);
    p1.add(p2);
    p1.add(p3);
    p1.add(p4);
    getContentPane().add(p1);
    this.setBounds(100, 100, 300, 400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    } public static void main(String args []){
    new TestButton();
    }
    }在JFrame中添加p1使用GridLayout布局,然后用BorderLayout布局添加上去的JPanel,每天按钮添加上JPanel的布局为BorderLayout.CENTER。