文档章节

Java学习笔记之Swing(二)

FelixSmile
 FelixSmile
发布于 2016/09/21 22:04
字数 2364
阅读 56
收藏 1

Java学习笔记之Swing(二)


通过本文你将学习到:

  • 了解各种布局管理器的样式
  • 掌握每一种布局管理器的使用

布局管理器

在Swing中的布局管理器有流布局、网格布局、边框布局、空布局、卡片布局等。下面我们将一一进行介绍。

流布局

流布局是相对比较简单的一种布局管理器,也是最常用的布局管理器。在流布局中放置控件时,将按照控件的添加顺序,依次将控件从左到右进行摆放,并且在一行的最后会进行自动换行放置 。在一行中,控件是默认居中放置的。

布局管理器也是通过构造器来创建的。流布局是通过FlowLayout 类来创建,FlowLayout类具有三种构造器。首先是无参构造器, 使用无参构造器能够创建一个默认的以居中对齐方式,控件间水 平和垂直间距为5个像素的流布局。

FlowLayout类还具有一个需要整型参数的构造器,使用该构造器能够创建一个指定对齐方式的流布局管理器,它的控件间水平和垂直间距仍然是默认的5个像素。流布局管理器的对齐方式如表所示。

对齐方式 说明
LEFT 左对齐方式
CENTER 居中对齐方式
RIGHT 右对齐方式
LEADING 控件与容器开始边对齐
TRAILING 控件与容器结束边对齐

FlowLayout类还有一个具有三个参数的构造器,第一个参数表示流布局管理器的对齐方式,第二个参数表示 流布局管理器中控件间水平间距,第三个参数表示流布局管理器中控件间垂直间距。 FlowLayout类中常用的方法:getAlignment方法和setAlignment方法分别获取和设置流布局管理器的对齐方式。 getHgap方法和setHgap方法分别获取和设置流布局管理器中控件和控件之间的水平间距。getVgap方法和setVgap方法分别获取和 设置流布局管理器中控件和控件之间的垂直间距。

//流布局实例
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);

网格布局

网络布局也是一种比较常见的布局管理器。使用网格布局管理器后,会将所有的控件尽量按照给出的行数列数来排列,同时网格布局管理器也会对控件进行尺寸的调整,使所有的控件具有相同的尺寸。在网格布局中,也会尽量使使用的空间成矩形的形式来显示。当窗体发生大小变化时,所有的空间也将自动改变大小来填充窗体。

网格布局是通过GridLayout类来创建的。GridLayout类具有三个构造器,使用无参构造器将创建具有默认行和默认列的网格布局。在创建网格布局管理器时最常用的就是具有两个整型参数的构造器,第一个参数表示网格布局管理器的行数,第二个参数表示网格布局管理器的列数。还有一个具有四个参数的构造器,除了可以定义行数和列数外,还可以定义控件间水平间距和垂直间距。

GridLayout类中还定义了一些方法来对创建的网格布局进行操作 。getRows方法和setRows方法分别是获取和设置网格布局的行数。getColumns方法和setColumns方法分别是获取和设置网格布局 的列数。getHgap方法和setHgap方法分别是获取和设置网格布局 中控件间水平间距。getVgap方法和setVgap方法分别是获取和设 置网络布局中的控件间垂直间距。

实例代码:

	 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);

效果图:

   ![这里写图片描述](http://img.blog.csdn.net/20160921220141635)

卡片布局

卡片布局是通过CardLayout类创建的。CardLayout类具有两个构造器,一个是无参构造器,另一个是需要指定控件和容器边界水平间距和垂直间距的构造器。这些已经在前面多次介绍,这里不 再作过多介绍。

在卡片布局容器中一次只能显示一个控件,要想显示其他控件, 就需要调用CardLayout类中的方法来执行。在CardLayout类的方法中,first方法和last方法分别是显示第一次添加的控件和显示最后一次添加的控件。next方法和previous方法分别是显示下一 个添加控件和上一个添加控件。这四个方法都是具有一个参数的 ,该参数是指定对哪一个容器中的控件进行操作。

CardLayout类中还有一个show方法,使用该方法可以显示指定的 控件,该方法具有两个参数,第一个参数是指定对哪一个容器中 的控件进行操作,第二个参数是指定要显示控件的名称。控件的 名称是提前为控件设置的。

为控件起名称是在添加控件的时候设置的,向卡片布局容器中添 加控件同样也是通过add方法来完成的。但是这里的add方法需要两个参数,第一个参数指定要添加的控件,第二个参数就是为该 控件起的名称。

© 著作权归作者所有

FelixSmile
粉丝 2
博文 15
码字总数 23099
作品 0
奉贤
程序员
私信 提问
加载中

评论(1)

m
mnisummer
以前学过一点,后来没学了
好程序员Java教程解读什么是swing

  好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用。运行swing程序要求用户电脑上有java环境,这一点不太现实也不方便。现在的java主要以web方向为主,...

好程序员IT
07/24
30
0
简单计算器

java swing 实现的简单计算器,jdk 7下可正常运行. 该作品可作为java swing学习使用,仅用于java编程学习,或个人使用。 该作品仅承诺可以正常运行,若需要改进功能,需另行商议。...

dhslp
2016/07/31
76
0
[北京] 北京十六方数据科技有限公司招聘java开发人员 年薪10W~15W

公司研发新产品,需要招聘两名java开发人员,公司以前从不加班,但目前公司研发新产品,在产品研发关键时候可能偶尔会有加班,加班一般安排在周末,占用一天时间,大家如有能力有兴趣,请发邮件到job...

nortan
2012/02/02
1K
20
JAVA 私塾第十、十一章笔记整理

JAVA 私塾第十、十一章笔记整理 第十章 AWT AWT(Abstract Window Toolkit)用于Java Application 的GUI(Graphical User Interface图形用户界面)编程。 AWT所涉及的类一般在java.awt包及其子包...

luodis
2011/02/19
65
0
Android学习笔记(四四):第三方Java库的使用

Java有很多第三方库。Android的Dalvik虚拟器不完全是Java,也就是Android SDK和传统的SDK不完全一样,如果Java库兼容Android,则可被利用。Java库使用受限于下面因素: 目标平台:Java代码适...

鉴客
2011/12/01
801
0

没有更多内容

加载失败,请刷新页面

加载更多

x002-语言元素

变量命令规则 硬性规则: 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。 大小写敏感(大写的a和小写的A是两个不同的变量)。 不要跟关键字(有特殊...

伟大源于勇敢的开始
今天
4
0
nginx反向代理配置

nginx配置文件位置/usr/local/nginx/conf/nginx.conf 配置文件修改: # cd /usr/local/nginx/conf # vim nginx.conf server {listen 80;server_name localhost;#charset k......

行者终成事
今天
5
0
OSChina 周日乱弹 —— 这是假的,和我之前的不一样

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
8
0
Rust学习笔记一 数据类型

写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差。 自学了Java、Kotlin、Python、...

MusiCodeXY
今天
5
0
Java 脚本引擎入门

Java Script Engine Java 脚本引擎可以将脚本嵌入Java代码中,可以自定义和扩展Java应用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期还可能会换...

阿提说说
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部