awt的LayoutManager布局管理器

问题引入:上节课的程序明明向ScrollPane容器中添加了一个文本框和一个按钮,但只能看到一个按钮,却看不到文本框,这是为什么呢?这是因为ScrollPane使用BorderLayout布局管理器的缘故,而BorderLayout导致了该容器中只有一个组件被显示出来

 

LayoutManager布局管理器

问题深入:在前几节课我们介绍了Component中有一个方法setBounds()可以设置当前容器的位置和大小,但是我们需要明确一件事,如果我们手动的为组件设置位置和大小的话,就会造成程序的不同性,例如如下

上面那行创建了一个Label组件,很多情况下,我们需要让Label组件的宽高和"你好,世界"这个字符串自身的宽高一致,这种大小称为最佳大小。由于操作系统存在差异,例如在windows上,我们要达到这样的效果,需要把该Label组件的宽高分别设置为100px、20px,但在linux操作系统上,可能需要把Label组件的宽高分别设置为120px、24px,才能达到同样的效果

如果要让我们的程序在不同的操作系统下,都要相同的使用体验,那么手动设置组件的位置和大小,无疑是一种灾难,因为有太多的组件,需要分别设置不同的操作系统下的大小和位置。为了解决这个问题,Java就提供了LayoutManager布局管理器,可以根据运行平台来自动调整组件大小,程序员不用手动设置组件大小和位置了,只需要为容器选择合适的布局管理器即可

 

布局管理器LayoutManager是一个接口 LayoutManager接口下有两个实现类分别是GridLayout、FlowLayout LayoutManager接口下有一个子接口是LayoutManager2 LayoutManager2接口下有三个实现类分别是CardLayout、GridBagLayout、BorderLayout

 

布局管理器LayoutManager共提供了5个实现类,即java的jdk共提供了5种布局管理器,如下

GridLayout:网格布局管理器 FlowLayout:流式布局管理器 CardLayout:卡片布局管理器 GridBagLayout:网格包布局管理器 BorderLayout:边框布局管理器

不同的布局对多个组件的展示效果和管理效果不同