14.5-全栈Java笔记:java.awt这些布局怎么写?|流式|边界|网格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14.5-全栈Java笔记:java.awt这些布局怎么写?|流式|边界|网格相关的知识,希望对你有一定的参考价值。

布局管理器

读者会发现,如果使用坐标定位法(空布局),在一个比较复杂的界面上定位每个控件的坐标是一个非常麻烦的工作,而且在界面大小发生改变时,控件的绝对位置也不会随之发生改变。那么如果我们想让用户界面上的组件可以按照不同的方式进行排列怎么办?例如:可以依序水平排列,或者按网格方式进行排列等,其实每种排列方案都是指组件的一种“布局”,要管理这些布局,就需要本节学习的布局管理器。                                             

技术分享

管理布局的类由java.awt包来提供,布局管理器是一组实现java.awt.LayoutManager接口的类,由这些类自动定位组件。一般使用布局管理器定义容器,如果容器使用了某种布局管理器后,那么放在其上的控件就按照相应的规则排列。我们接下来就介绍几种常用的布局管理器:流式布局(FlowLayout)、边界布局(BorderLayout)、网格布局(GridLayout)。如图1所示。


如上图所示:如果在一个容器中压入控件(该示例的控件用一组JButton代表),我们发现流式布局会将控件放在第一行,第一行满了自动放置在第二行,依次类推;而边界布局会把控件分布在容器的东、南、西、北、中的五个区域;最后网格布局会把容器中的控件按n行m列均匀分布。 


注意:

1)一旦使用任何布局,那么控件的坐标定位将失效。

2)如果在使用流式布局的容器中压入JTextField控件,那么这个JTextField的构造方法请

3)使用传int参数的构造方法。


java.awt.FlowLayout

流布局用于安排有方向的控件,这非常类似于段落中的文本行。如表1所示,为FlowLayout类的构造方法。

技术分享

注意

    JPanel的无参构造方法默认就是流式布局。


 【示例1】流式布局

package cn.sxt.views.testlayout;

 

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

 

public class FlowLayoutDemo extends JFrame {

           private JPanel pnlMain;

           private JButton btn1;

           private JButton btn2;

           private JButton btn3;

           private JButton btn4;

           private JButton btn5;

          

           public FlowLayoutDemo() {

                     //该处代码也可以写成:pnlMain = new JPanel(new FlowLayout());

                     pnlMain = new JPanel();

                     btn1 = new JButton("按钮1");

                     btn2 = new JButton("按钮2");

                     btn3 = new JButton("按钮3");

                     btn4 = new JButton("按钮4");

                     btn5 = new JButton("按钮5");

                    

                     init();

           }

 

           private void init() {

                     //设置窗口属性

                     this.setTitle("测试流式布局");

                     this.setSize(300, 200);

                     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                     //将控件添加到容器上

                     pnlMain.add(btn1);

                     pnlMain.add(btn2);

                     pnlMain.add(btn3);

                     pnlMain.add(btn4);

                     pnlMain.add(btn5);

                     //将容器添加到窗口上

                     this.add(pnlMain);

                     this.setVisible(true);

           }

          

           /**创建流式布局窗口*/

           public static void main(String[ ] args) {

                     new FlowLayoutDemo();

           }

}

执行结果如图所示:

技术分享


java.awt. BorderLayout

布置容器的边界布局,它可以对容器上的控件进行安排,并调整其大小,使其符合下列五个区域:南、北、东、西和中间区域。 如表3所示,为BorderLayout类的构造方法。

技术分享 

注意:

边界布局最多将容器分成5个区间,但是可以少,比如只有北、中、南,或是只有西、中、东,或是按照需求具体划分


【示例2】边界布局

package cn.sxt.views.testlayout;

 

import java.awt.BorderLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

 

public class BorderLayoutDemo extends JFrame {

           private JPanel pnlMain;

           private JButton btnN;

           private JButton btnC;

           private JButton btnS;

           private JButton btnW;

           private JButton btnE;

          

           public BorderLayoutDemo() {

                     //将容器的布局设置为边界布局

                     pnlMain = new JPanel(new BorderLayout());

                     btnN = new JButton("按钮-北");

                     btnC = new JButton("按钮-中");

                     btnS = new JButton("按钮-南");

                     btnW = new JButton("按钮-西");

                     btnE = new JButton("按钮-东");

                    

                     init();

           }

 

           private void init() {

                     //设置窗口属性

                     this.setTitle("测试边界布局");

                     this.setSize(300, 200);

                     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                     /*

                      * 注意在使用边界布局的容器时,压入控件要以第2参数说明控件放在哪个位置;

                      * 否则,如果没有第2参数,默认在中间区域

                       */

                     pnlMain.add(btnN,BorderLayout.NORTH);

                     pnlMain.add(btnC,BorderLayout.CENTER);

                     pnlMain.add(btnS,BorderLayout.SOUTH);

                     pnlMain.add(btnW,BorderLayout.WEST);

                     pnlMain.add(btnE,BorderLayout.EAST);

                     //将容器添加到窗口上

                     this.add(pnlMain);

                     this.setVisible(true);

           }

          

           /**创建边界布局窗口*/

           public static void main(String[ ] args) {

                     new BorderLayoutDemo();

           }

}

执行结果如图所示:

技术分享


 java.awt. GridLayout

网格布局它以矩形网格形式对容器的控件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个控件。 如表5所示,为GridLayout类的构造方法。

技术分享

注意:

    使用网格布局时,如果控件的数量过多或过少时,网格布局会自动调整,但是行数不会变化,如:设置一个2行3列的网格,如果压入控件为7个,那么自动变为2行4列。

如果在一个容器中要压入12个按钮,按3行4列排列,如示例3所示。


【示例3】网格布局

package cn.sxt.views.testlayout;

 

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

 

public class GridLayoutDemo extends JFrame {

           private JPanel pnlMain;

           private JButton[ ] btnS;

          

           public GridLayoutDemo() {

                     //将容器的布局设置为网格布局,指定布局为3行4列

                     pnlMain = new JPanel(new GridLayout(3, 4));

                     btnS = new JButton[12];

                     for(int i = 0;i < btnS.length;i++) {

                                btnS[i] = new JButton("按钮"+(i+1));

                     }

                    

                     init();

           }

 

           private void init() {

                     //设置窗口属性

                     this.setTitle("测试网格布局");

                     this.setSize(400, 200);

                     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                     //将控件添加到容器上

                     for(JButton btn : btnS) {

                                pnlMain.add(btn);

                     }

                     //将容器添加到窗口上

                     this.add(pnlMain);

                     this.setVisible(true);

           }

           /**创建网格布局窗口*/

           public static void main(String[ ] args) {

                     new GridLayoutDemo();

           }

}

执行结果如图所示:

技术分享




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


 笔记包含从浅入深的六大部分:

 A-Java入门阶段

 B-数据库从入门到精通

 C-手刃移动前端和Web前端

 D-J2EE从了解到实战

 E-Java高级框架精解

 F-Linux和Hadoop 


本文出自 “全栈Java笔记” 博客,请务必保留此出处http://javanew.blog.51cto.com/12931675/1956433

以上是关于14.5-全栈Java笔记:java.awt这些布局怎么写?|流式|边界|网格的主要内容,如果未能解决你的问题,请参考以下文章

java笔记之图形类详解

Java笔记

6.1-全栈Java笔记:异常处理机制的概念

JAVA学习笔记

Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)

6.2-全栈Java笔记:异常处理机制的分类