目录
1 实验名称
Java Swing常用布局管理器
2 实验目的
继续熟练掌握在IDEA中调试代码
掌握Java Swing中常用布局管理器的使用
继续掌握组件和容器的概念
3 实验源代码
JTabbedPaneApplication.java:
public class JTabbedPaneApplication {
public static void main(String[] args) {
MyJFrame myJFrame = new MyJFrame();
myJFrame.init();
}
}
MyJFrame.java:
public class MyJFrame extends JFrame {
private JTabbedPane jTabbedPane = null;//定义选项卡容器
public void init(){
setTitle("选项卡窗口");
setBounds(200,200,300,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jTabbedPane = new JTabbedPane(JTabbedPane.LEFT);//左侧选项卡
jTabbedPane.add("FlowLayout",new FlowLayoutPanel());
jTabbedPane.add("GridLayout",new GridLayoutPanel());
jTabbedPane.add("BorderLayout",new BorderLayoutPanel());
jTabbedPane.validate();
//向窗口中添加选项卡容器
this.add(jTabbedPane, BorderLayout.CENTER);
this.validate();
}
}
FlowLayoutPanel.java:
public class FlowLayoutPanel extends JPanel {
FlowLayoutPanel(){
add(new JLabel("FlowLayoutPanel"));
add(new JButton("OK"));
add(new JScrollPane(new JTextArea(10,10)));
}
}
GridLayoutPanel.java:
public class GridLayoutPanel extends JPanel {
//表格布局管理器
GridLayoutPanel() {
GridLayout gridLayout = new GridLayout(12, 12);
//设置面板使用以上 器
this.setLayout(gridLayout);
//创建一个标签对象的二维数组
// Label[][] labels = new Label[12][12];//way1
JLabel[][] labels = new JLabel[12][12];//way2
//JLabel默认情况下是透明的,所以直接设置背景颜色无法显示
//put into
for (int i = 0; i < 12; i++) {//外 控制 行数
for (int j = 0; j < 12; j++) {//内 控制列数
labels[i][j] = new JLabel();//创建
labels[i][j].setOpaque(true);//2way
if((i+j)%2==0) {//求余 模 运算
//下表和为偶数的 黑
labels[i][j].setBackground(Color.BLACK);
}else{
labels[i][j].setBackground(Color.WHITE);
}
add(labels[i][j]);//对象添加到面板中
}
}
validate();
}
}
BorderLayoutPanel.java:
public class BorderLayoutPanel extends JPanel {
private JButton btnNorth;
private JButton btnSouth;
private JButton btnEast;
private JButton btnWest;
private JButton btnNCenter;
BorderLayoutPanel(){
this.setLayout(new BorderLayout());//设为边界布局管理器
btnEast = new JButton("east");
btnWest = new JButton("west");
btnSouth = new JButton("south");
btnNorth = new JButton("north");
btnNCenter = new JButton("center");
this.add(btnEast,BorderLayout.EAST);
this.add(btnWest,BorderLayout.WEST);
this.add(btnNCenter,BorderLayout.CENTER);
this.add(btnNorth,BorderLayout.NORTH);
this.add(btnSouth,BorderLayout.SOUTH);
validate();
}
}
4 实验运行结果图
5 总结
应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这样,为了操作方便,也只是在大的模块下用布局管理器,在一些小的模块下还是用绝对布局。在一些没要求界面大小改变的窗口,一般采用绝对布局比较容易,但对于后期的修改来说比较麻烦。
BorderLayout,这种布局管理器分为东、南、西、北、中心五个方位。北和南的组件可以在水平方向上拉伸;而东和西的组件可以在垂直方向上拉伸;中心的组件可同时在水平和垂直方向上同时拉伸,从而填充所有剩余空间。在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South 区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果 Center区域没有组件,则保持空白。BorderLayout是RootPaneContainer (JInternalFrame、JDialog、JFrame、JWindow)的默认布局管理器。 FlowLayout布局可以创建一个居中对齐的布局对象,使用add方法将组件顺序地添加到容器中,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左到右排列,每一行中的组件都居中排列。若一个容器使用BorderLayout布局,那么容器的空间简单地划分为东、西、南、北、中5个区域。GirdLayout布局,其策略是把容器划分为若干行乘若干列的网格区域,组件进入容器的顺序将按照第一行第一个、第一行第二个等等排列。