2:Swing布局
一:绝对定位(设置布局null)
绝对定位就是指不使用布局器,组件的位置和大小需要单独指定
JFrame f = new JFrame("title");
f.setSize(400, 300);
f.setLocation(200, 200);
// 设置布局器为null,即进行绝对定位,容器上的组件都需要指定位置和大小
f.setLayout(null);
JButton b1 = new JButton("AAA");
// 指定位置和大小
b1.setBounds(50, 50, 80, 30);
轴点:左上角
public void setBounds(int x,
int y,
int width,
int height)
二:BorderLayout
public void init() {
setLayout(new BorderLayout());
add(new Button("North"), BorderLayout.NORTH);
add(new Button("South"), BorderLayout.SOUTH);
add(new Button("East"), BorderLayout.EAST);
add(new Button("West"), BorderLayout.WEST);
add(new Button("Center"), BorderLayout.CENTER);
}
}
备注: 在使用边界布局的时候,我们会发现它的区域的大小好像被限制死了,无法按照自己想要的大小来合理分配。 而在这个时候使用setSize()不起作用。
解决方法是使用 setPreferredSize()来设置自定义大小
getContentPane().add(p, BorderLayout.NORTH);
getContentPane().add(panel, BorderLayout.SOUTH);
p.setPreferredSize(new Dimension(0, 250));//使用Dimension()方法来设置自定义的宽度和高度
panel.setPreferredSize(new Dimension(400, 100));
JDK文档:
public class Dimension
extends Dimension2D
implements SerializableDimension类封装单个对象中组件的宽度和高度(以整数精度)。 该类与组件的某些属性相关联。 Component类和LayoutManager接口定义的几种方法返回一个Dimension对象。
通常width和height的值是非负整数。 允许您创建维度的构造函数不会阻止您为这些属性设置负值。 如果width或height值为负,则其他对象定义的某些方法的行为是未定义的。
三:FlowLayout
设置布局器为FlowLayout,顺序布局器
容器上的组件水平摆放
加入到容器即可,无需单独指定大小和位置
三:GridLayout
GridLayout类是一个布局管理器,它将一个容器的组件放在矩形网格中。 容器被分成等大小的矩形,并且每个矩形中放置一个组件。
public void init() {
setLayout(new GridLayout(3,2)); //三行俩列的布局,下面的添加的按钮会根据添加的前后依次放入网格中
add(new Button("1"));
add(new Button("2"));
add(new Button("3"));
add(new Button("4"));
add(new Button("5"));
add(new Button("6"));
}
四:CardLayout
CardLayout类排列卡的容器中的每个组件。在一个时间内只有一张卡是可见,与容器作为将整叠卡片。就像是web端的Tab切换一样,一般是使用面板来配合完成。
[备注:上面图片来源于网络和jdk文档]