两种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();
}
}
同时用的时候,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();
}
}
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();
}
}
这样是你想要的效果吗?
另外,还是希望混用gridlayout和boxlayout,因为比较好奇这点。
这只是个例子,我实际的程序中,左边的panel中的控件是按照行列来摆放的。中间和右边的panel中的控件都放在一行里,所以如果三个panel都用gridlayout也是可以的。只要达到效果就好。求助!
再有,是不是用了layout之后,就不能改变控件在panel中的位置和大小了?比如setsize之类的,即使设置了也没有效果。这一点也请解答一下吧!
感谢!
面板上可以无限放面板希望你的问题能顺利解决
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。