经过本文你将学习到:html
在Swing中的布局管理器有流布局、网格布局、边框布局、空布局、卡片布局等。下面咱们将一一进行介绍。程序员
流布局是相对比较简单的一种布局管理器,也是最经常使用的布局管理器。在流布局中放置控件时,将按照控件的添加顺序,依次将控件从左到右进行摆放,而且在一行的最后会进行自动换行放置 。在一行中,控件是默认居中放置的。网络
布局管理器也是经过构造器来建立的。流布局是经过FlowLayout 类来建立,FlowLayout类具备三种构造器。首先是无参构造器, 使用无参构造器可以建立一个默认的以居中对齐方式,控件间水 平和垂直间距为5个像素的流布局。布局
FlowLayout类还具备一个须要整型参数的构造器,使用该构造器可以建立一个指定对齐方式的流布局管理器,它的控件间水平和垂直间距仍然是默认的5个像素。流布局管理器的对齐方式如表所示。学习
对齐方式 | 说明 |
---|---|
LEFT | 左对齐方式 |
CENTER | 居中对齐方式 |
RIGHT | 右对齐方式 |
LEADING | 控件与容器开始边对齐 |
TRAILING | 控件与容器结束边对齐 |
FlowLayout类还有一个具备三个参数的构造器,第一个参数表示流布局管理器的对齐方式,第二个参数表示 流布局管理器中控件间水平间距,第三个参数表示流布局管理器中控件间垂直间距。 FlowLayout类中经常使用的方法:getAlignment方法和setAlignment方法分别获取和设置流布局管理器的对齐方式。 getHgap方法和setHgap方法分别获取和设置流布局管理器中控件和控件之间的水平间距。getVgap方法和setVgap方法分别获取和 设置流布局管理器中控件和控件之间的垂直间距。.net
//流布局实例 JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("FlowLayout Test"); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); String text = "A JTextArea object represents "+"a multiline area for displaying text. "+ "You can change the number of lines”+"that can be displayed at a time. "; //定义指定文本,行数和列数的多行文本框 JTextArea textArea1 = new JTextArea(text, 5, 10); textArea1.setPreferredSize(new Dimension(100, 100)); JTextArea textArea2 = new JTextArea(text, 5, 10); textArea2.setPreferredSize(new Dimension(100, 100)); //定义一个滑动面板,并设置水平和垂直方向上设置为可滑动 JScrollPane scrollPane = new JScrollPane(textArea2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,ScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //设置多行文本框文自动换行 textArea1.setLineWrap(false); textArea2.setLineWrap(true); frame.add(textArea1); frame.add(scrollPane); frame.pack(); frame.setVisible(true);
网络布局也是一种比较常见的布局管理器。使用网格布局管理器后,会将全部的控件尽可能按照给出的行数和列数来排列,同时网格布局管理器也会对控件进行尺寸的调整,使全部的控件具备相同的尺寸。在网格布局中,也会尽可能使使用的空间成矩形的形式来显示。当窗体发生大小变化时,全部的空间也将自动改变大小来填充窗体。code
网格布局是经过GridLayout类来建立的。GridLayout类具备三个构造器,使用无参构造器将建立具备默认行和默认列的网格布局。在建立网格布局管理器时最经常使用的就是具备两个整型参数的构造器,第一个参数表示网格布局管理器的行数,第二个参数表示网格布局管理器的列数。还有一个具备四个参数的构造器,除了能够定义行数和列数外,还能够定义控件间水平间距和垂直间距。htm
GridLayout类中还定义了一些方法来对建立的网格布局进行操做 。getRows方法和setRows方法分别是获取和设置网格布局的行数。getColumns方法和setColumns方法分别是获取和设置网格布局 的列数。getHgap方法和setHgap方法分别是获取和设置网格布局 中控件间水平间距。getVgap方法和setVgap方法分别是获取和设 置网络布局中的控件间垂直间距。blog
实例代码:图片
frame.setLayout(new GridLayout(3, 2)); frame.add(new JButton("Button 1")); frame.add(new JButton("Button 2")); frame.add(new JButton("Button 3")); frame.add(new JButton("Button 4")); frame.add(new JButton("Button 5")); frame.add(new JButton("Button 6")); frame.add(new JButton("Button 7")); frame.add(new JButton("Button 8")); frame.pack(); frame.setVisible(true);
效果图:
上面学习的流布局和网格布局具备不少类似的地方,可是边框布局就和他们存在很大的不一样。在使用边框布局时,一般都会由程序员来为控件指定在容器中的位置。边框布局将容器分为五个部分,包括东南西北中五部分。在每个部分中只能放置一个控件 ,因此若是控件超过五个将不能彻底显示。在使用边框布局时需 要注意的是,当容器的大小发生变化时,四周的控件是不会发生变化的,只有中间的控件将发生变化。
边框布局是经过BorderLayout类建立的。BorderLayout类具备两个构造器,一个是无参构造器,另外一个是指定控件间间距的构造器,一般使用无参构造器来建立边框布局管理器。
在前面将控件添加到容器中都是经过add方法,将控件做为add方法的参 数来进行添加的。可是在向边框布局容器中添加控件时,这样是不彻底 的。在向边框布局容器中添加控件是使用具备两个参数的add方法。其中 第一个参数表示要添加的控件,第二个参数表示要添加到边框布局中的 哪个位置。边框布局的位置表示是经过常量来表示的,具体常量如表所示。
位置 | 说明 |
---|---|
NORTH | 容器顶部 |
SOUTH | 容器底部 |
WEST | 容器左边 |
EAST | 容器右边 |
CENTER | 容器的中央 |
实例代码:
JFrame frame = new JFrame("BorderLayout Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); JTextField textField = new JTextField("<your name>"); frame.add(textField, BorderLayout.WEST); JButton button = new JButton("<html>R<b>e</b>gister</html>"); frame.add(button, BorderLayout.EAST);
效果图:
空布局就是没有使用布局管理器,在空布局的状况下将根据控件的自身信息来为控件指定位置。这就使得控件的布局更加灵活,与此同时给开发人员带来了更大的工做量。
空布局是不须要使用类来建立的,只须要在程序指定布局管理器 为null。将控件添加到空布局容器中时,仍然是使用add方法。因 为这里使用的是空布局管理器,因此在添加控件以前,要对控件 进行设置操做。设置操做是经过setBounds方法来完成的, setBounds方法的基本语法格式以下所示。
public void setBounds(int x,int y,int width,int height);
其中x和y表示的是控件最左上侧的坐标,从而也固定了该控件的 位置。width和height表示的是空间的宽度和高度,从而也指定了 控件的大小。
实例代码:
frame.setLayout(null);//布局管理器设置为null JLabel label = new JLabel("First Name:"); label.setBounds(20, 20, 100, 20);//四个参数分别是x,y坐标和label的宽和高 JTextField textField = new JTextField(); textField.setBounds(124, 25, 100, 20); frame.add(label); frame.add(textField);
效果图:

卡片布局是经过CardLayout类建立的。CardLayout类具备两个构造器,一个是无参构造器,另外一个是须要指定控件和容器边界水平间距和垂直间距的构造器。这些已经在前面屡次介绍,这里不 再做过多介绍。
在卡片布局容器中一次只能显示一个控件,要想显示其余控件, 就须要调用CardLayout类中的方法来执行。在CardLayout类的方法中,first方法和last方法分别是显示第一次添加的控件和显示最后一次添加的控件。next方法和previous方法分别是显示下一 个添加控件和上一个添加控件。这四个方法都是具备一个参数的 ,该参数是指定对哪个容器中的控件进行操做。
CardLayout类中还有一个show方法,使用该方法能够显示指定的 控件,该方法具备两个参数,第一个参数是指定对哪个容器中 的控件进行操做,第二个参数是指定要显示控件的名称。控件的 名称是提早为控件设置的。
为控件起名称是在添加控件的时候设置的,向卡片布局容器中添 加控件一样也是经过add方法来完成的。可是这里的add方法须要两个参数,第一个参数指定要添加的控件,第二个参数就是为该 控件起的名称。