Java学习-Day06-图形用户界面编程

  • AWT(抽象窗口工具集)
  • Swing组件作为AWT的优化和改进
  • AWT是图形用户界面编程的基础,Swing组件替代了绝大部分AWT组件,对AWT图形用户界面编程有极好的补充和增强

1.AWT容器

1.1容器(container)是Component的子类,容器对象本身也是一个组件,可以调用component的方法:
  • setLocation(int x,int y):设置组件的位置
  • setSize(int width,int height):设置组件的大小
  • setBounds(int x,int y,int width,int height):同时设置组件的位置大小
  • setVisible(boolean b):设置该组件的可见性
1.2容器内还可以盛装其他组件,容器类提供了如下常用方法:
  • Component add(Component comp):向容器中添加其他组件,并返回被添加的组件
  • Component getComponentAt(int x,int y):返回指定点的组件
  • int getComponentCount():返回该容器内组件的数量
  • Component[] getComponents():返回该容器内的所有组件
1.3AWT主要提供了如下两种主要的容器类型
  • window:可独立存在的顶级窗口
  • Panel:可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中


    AWT容器的继承关系
1.4Frame(代表常见的窗口,是Window的子类)
  • Frame对象有标题,允许通过拖拉来改变窗口的位置,大小
  • 初始化时为不可见,可用setVisible(true)来使其显示出来
  • 默认使用BorderLayout来作为其布局管理器
1.5 Panel(AWT另一个典型容器,不能独立存在,必须放在其他容器中)
  • 可作为容器来盛装其他组件,为放置组件提供空间
  • 不能单独存在,必须放置到其他容器中
  • 默认使用FlowLayout作为其布局管理器
1.6 ScrollPane(带滚动条的容器)
  • 可作为容器来盛装其他组件,当组件占用空间过大时,ScrollPane自动产生滚动条,当然也可以通过指定特定的构造器参数来指定默认具有滚动条
  • 不能单独存在,必须放置到其他容器中
  • 默认使用BorderLayout作为其布局管理器,ScrollPane通常用于盛装其他容器,所以通常不允许改变ScrollPane的布局管理器

2.布局管理器

为了使生成的图形用户界面具有良好的平台无关性,Java提供了LayoutManager,LayoutManager可以根据运行平台来调整组件的大小

  • AWT容器都有默认布局管理器,指定布局管理器通过调用setLayout(LayoutManager lm)来完成
  • AWT提供了FlowLayout,BorderLayout,GridLayout,GridBagLayout,CardLayout 一共5个常用的布局管理器,Swing还提供了一个BoxLayout布局管理器
2.1 FlowLayout管理器(类似inline)
  • 组件像流水一样默认从左到右,遇到边界重启一行
2.1.1构造器
  • FlowLayout():使用默认对其方式,垂直间距,水平间距创建
  • FlowLayout(int align):使用指定对其方式
  • FlowLayout(int align,int hgap,int vgap):指定三个选项
  • align使用三个FlowLayout类的静态常量:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT
2.2 BorderLayout管理器
BorderLayout
  • 使用BorderLayout管理的容器中添加组件时,需要指定添加到哪个区域中,如果没有指定默认添加到中间区域
  • 如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件
2.2.1 构造器
  • BorderLayout():使用默认水平间距,垂直间距
  • BorderLayout(int hgap,int vgap):使用指定
2.3 GridLayout管理器(类似table布局)
2.3.1 构造器
  • GridLayout(int rows,int cols):使用指定行数,列数,默认横向间距,纵向间距
  • GridLayout(int rows,int cols,int hgap,int vgap):采用指定
2.4 GridBagLayout管理器
  • 功能最强大,最复杂,GridBagLayout中,一个组件可以跨越一个或多个网格,并可以设置各网格的大小互不相同
  • 为了处理GridBagLayout中GUI组件的大小,跨越性,Java提供了GridBagConStraints对象

使用步骤
1.创建GridBagLayout布局管理器,并指定GUI容器使用该布局管理器

GridBagLayout gb = new GridBagLayout();
constainer.setLayout(gb)

2.创建GridBagConStraints对象,并设置该对象的相关属性

gbc.gridx = 2;//设置横向索引
gbc.gridy = 1;//设置纵向索引
gbc.gridwidth = 2;//设置横向跨越多少网格
gbc.gridheight = 1;//设置纵向跨越多少网格

3.调用GridBagLayout对象的方法来简历GridBagConstraints对象和受控制组件之间的关联

gb.setConstraints(c, gbc);//设置c组件受gbc对象控制

4.添加组件,与采用普通布局管理器添加组件的方法完全一样

container.add(c);
  • 需要添加多个时重复2--4
2.5 CardLayout管理器
  • CardLayout布局管理器以时间而非空间来管理它的组件,它将加入容器的所有组件看成一叠卡片,每次只有最上面的那个Component课件,类似扑克牌
2.5.1 构造器
  • CardLayout():默认
  • CardLayout(int hgap,int vgap):指定边距
2.5.2 控制组件可见
  • first(Container target):显示第一张卡片
  • last(Container target):显示最后一张
  • previous(Container target):显示前一张卡片
  • next(Container target):显示后一张
  • show(Container target,String name):显示指定名字
2.6 绝对定位

步骤:
1.将Container中的布局管理器设为nullsetLayout(null)
2.向容器中添加组件时,先调用setBounds()或setSize()方法来设置组件的大小,位置,或者直接创建GUI组件时通过构造器确定

  • 绝对定位容易丧失跨平台特性
2.7 BoxLayout管理器(类似Flex布局?)
  • 由Swing中引入
  • BoxLayout(Container target,int axis):指定创建基于target容器的BoxLayout布局管理器,该布局管理器的组件按axis方向排列,其中axis有BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向
  • BoxLayout通常和Box容器结合使用,Box容器类似Panel容器,但是默认使用BoxLayout管理器
  • createHorizontalBox():创建一个水平排列的box容器
  • createVerticalBox():创建一个垂直排列组件的Box容器
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容

  • java是面向过程的编程语言:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越...
    Java小辰阅读 3,047评论 0 17
  • 第01章 JAVA简介第02章 基础语法第02章 递归补充第03章 面向对象第04章 异常处理第05章 数组第06...
    顺毛阅读 511评论 0 1
  • AWT AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Applicat...
    BigZoo阅读 889评论 1 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 自从报名了坦桑尼亚远征后,就开始思考怎么筹款了,2000英镑对于中国小伙伴,真是一个很巨大的挑战,也许在以往发发情...
    Riemann_Jin阅读 330评论 3 8