Java学习之面板与布局管理器
- 面板- 流布局管理器- 网格布局管理器- 边界布局管理器今天我们先创建一个窗体,再创建一个容器,容器使用的是一个3行1列的网格布局管理器,然后我们在容器中添加不同布局的面板来看一下效果1、首先我们来填充容器的第一行,我们创建一个流布局去填充package cm.test.demo9;import java.awt.*;import javax.swing....
- 面板
- 流布局管理器
- 网格布局管理器
- 边界布局管理器
今天我们先创建一个窗体,再创建一个容器,容器使用的是一个3行1列的网格布局管理器,然后我们在容器中添加不同布局的面板来看一下效果
1、首先我们来填充容器的第一行,我们创建一个流布局去填充
package cm.test.demo9;
import java.awt.*;
import javax.swing.*;
public class JPanelTest extends JFrame {
public JPanelTest() {
Container c=getContentPane();//创建一个窗体必备的玩意——容器
c.setLayout(new GridLayout(3, 1));//把整个容器设置成3行1列的网格布局
JPanel p1=new JPanel(new FlowLayout());//创建第一个面板,并让他使用流布局管理器
String btn[]=new String[10];
for(int i=0;i<btn.length;i++) {
p1.add(new JButton("我是按钮"+(i+1)+"号"));//为每一个按钮赋名字,并且生成JButton对象,然后添加到面板p1中
}
c.add(p1);//把面板p1添加到容器中
setBounds(100, 100, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new JPanelTest();
}
}
输出结果:
我们改变窗体大小,按钮的布局也会跟着变化,如图
在上面的例子中,我们是在一个窗体中创建了一个面板,这个面板使用流布局管理器,我们的容器使用的是3行1列的网格布局(注意是这个面板使用流布局管理器,而不是容器使用流布局管理器,当你改成容器使用流布局管理器的话,我们这个具体每个面板内的内容就不是流布局,我们必须还得再把面板设置成流布局)
2、接下来我们再来填充容器的第二行,我们创建一个3行2列的网格布局去填充
package cm.test.demo9;
import java.awt.*;
import javax.swing.*;
public class JPanelTest extends JFrame {
public JPanelTest() {
Container c=getContentPane();//创建一个窗体必备的玩意——容器
c.setLayout(new GridLayout(3, 1));//把整个容器设置成3行1列的网格布局
JPanel p1=new JPanel(new FlowLayout());//创建第一个面板,并让他使用流布局管理器
String btn[]=new String[10];
for(int i=0;i<btn.length;i++) {
p1.add(new JButton("我是按钮"+(i+1)+"号"));//为每一个按钮赋名字,并且生成JButton对象,然后添加到面板p1中
}
c.add(p1);//把面板p1添加到容器中
JPanel p2=new JPanel(new GridLayout(3, 2));//创建第二个面板,并且让他使用一个网格布局管理器,网格大小为3行2列
String btn2[]=new String[10];
for(int i=0;i<btn2.length;i++) {
p2.add(new JButton("我是按钮"+(i+1)+"号"));
}
c.add(p2);//把面板p2添加到容器中
setBounds(100, 100, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new JPanelTest();
}
}
输出结果:
因为我们面板1(最上面的)是使用的流布局管理器,所以他的整体布局会随着窗体的大小变化而变化,而我们的面板2(中间的)是使用的网格布局管理器,所以它整体的布局不会随着窗体的大小变化而变化。每一个网格的位置都一定固定了。
3、接下来我们再来填充容器的第三行,我们创建一个边界布局去填充
package cm.test.demo9;
import java.awt.*;
import javax.swing.*;
public class JPanelTest extends JFrame {
public JPanelTest() {
Container c=getContentPane();//创建一个窗体必备的玩意——容器
c.setLayout(new GridLayout(3, 1));//把整个容器设置成2行1列的网格布局
//创建第一个面板,并让其使用流布局管理器
JPanel p1=new JPanel(new FlowLayout());//创建第一个面板,并让他使用流布局管理器
String btn[]=new String[10];
for(int i=0;i<btn.length;i++) {
p1.add(new JButton("我是按钮"+(i+1)+"号"));//为每一个按钮赋名字,并且生成JButton对象,然后添加到面板p1中
}
c.add(p1);//把面板p1添加到容器中
//创建第二个面板,并让其使用网格布局管理器
JPanel p2=new JPanel(new GridLayout(3, 2));//创建第二个面板,并且让他使用一个网格布局管理器,网格大小为3行2列
String btn2[]=new String[10];
for(int i=0;i<btn2.length;i++) {
p2.add(new JButton("我是按钮"+(i+1)+"号"));
}
c.add(p2);//把面板p2添加到容器中
//创建第三个面板,并让其使用边界布局管理器
JPanel p3=new JPanel(new BorderLayout());//新建面板并让其使用边界布局管理器
JButton centerButton=new JButton("我是中央军区");//创建按钮,并为其赋一个名字
JButton northButton=new JButton("我是北部军区");
JButton southButton=new JButton("我是南部军区");
JButton westButton=new JButton("我是西部军区");
JButton easterButton=new JButton("我是东部军区");
p3.add(centerButton, BorderLayout.CENTER);//把按钮添加到面板3的指定位置
p3.add(northButton, BorderLayout.NORTH);
p3.add(southButton, BorderLayout.SOUTH);
p3.add(westButton, BorderLayout.WEST);
p3.add(easterButton, BorderLayout.EAST);
c.add(p3);//把面板p3添加到容器中
setBounds(100, 100, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new JPanelTest();
}
}
输出结果:
边界布局管理器和网格布局管理器一样,他们中的每一个组件的相对位置都不会随着窗体大小的变化而变化
注意:
1、我们一定要区分开容器的布局和面板的布局,容器的布局是大类,它控制着每一个面板的排放位置,而面板的布局是小类,它控制的是我们面板内部的排放位置
2、只有使用流布局管理器的时候,各个组件的大小才不会变化,但是组件的相对位置会发生变化;其他布局管理器中组件的大小都会随着窗体的大小变化而变化,但是组件的相对位置不会发生变化。这在以后用到文本框的时候就有所体会了
面板和布局管理器就暂时先写到这里,关于面板的其他内容再在其他文章中写。
更多推荐
所有评论(0)