在实际应用中,我们见到的许多应用界面都属于GUI图形型用户界面。如:我们点击QQ图标,就会弹出一个QQ登陆界面的对话框。这个QQ图标就可以被称作图形化的用户界面。

其实,用户界面的类型分为两类:Command line UserInterface (命令行用户接口)

•    就是常见的Dos命令行操作。

•    需要记忆一些常用的命令,操作不直观。

举例:

•    比如:创建文件夹,或者删除文件夹等

例如MS-DOS

二、图形用户界面(GUI,Graphical User Interface )是指以图形化方式与用户进行交互的程序运行界面,例如MicrosoftWindows、Word等。

优点:更友好、更丰富,且提供灵活、强大的人机交互功能,成为当前应用程序设计的主流。

在GUI程序设计中,组件(Component)是GUI的基本组成元素,凡是能够以图形化方式显示在屏幕上并能与用户交互的对象均为组件。

另外,在JDK的java.awt包中定义了多种GUI组件类,如Window、Menu、Button、Label、TextField、Scrollbar等。

这些抽象类,定义了GUI 组件的基本特性和功能

由上图可以看出,GUI中的组件可分为:

其中,需要注意的是:

  1. Container类描述了容器组件的所有性质;

2.它继承于Component类,因此容器类对象本身也是一个组件,具有组件的所有性质,但反过来组件却不一定是容器;

3.控制组件要想显示出来必须放置在容器组件中

其中,容器类型的组件在java.awt包下可以见到。这里,需要注意在AWT中存在两种主要的容器类型:

1. java.awt.Window
描述的是一个没有边框和菜单栏、可自由停靠的顶层容器(是指不允许将其包含于其他的容器中),一般不直接使用该类,而是使用其子类Frame

2.java.awt.Panel
最简单而常用的容器,可作为容器包含其他组件,但不能独立存在,必须被添加到其它容器中。

案例:

  示例1:第一个GUI应用程序。

importjava.awt.*;

classTestFirstFrame{

      public static void main(String args[]){

       Frame frame=new Frame("第一个图形用户界面应用程序");//容器

       Label lbl=new Label("这是我的第一个图形用户界面!");//控制组件

       lbl.setBackground(Color.pink);

       frame.setLayout(new FlowLayout());

       frame.add(lbl);       //将控制组件添加到容器中

       frame.setSize(200,100);

       frame.setVisible(true);

      }

}

  

应注意的是:

1. Frame 默认的大小为刚好容纳下标题条和最小(大)化、关闭按钮,setSize()可设置Frame大小。

2.Frame窗口默认是不可见的,可使用setVisible(true|false)方法使之可见或隐藏。

3.组件在容器中的摆放位置由布局管理器决定,Frame使用setLayout()方法可以设置窗口的布局。

4.FlowLayout—流式布局管理,特点是组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。

实例2.容器组件Panel的使用。

Frame frame=new Frame("容器Panel的使用");

Panel panel=new Panel();

Button btn=new Button("确定");

panel.setBackground(Color.cyan);

panel.setSize(100,50);

panel.setLocation(40,40);

frame.setLayout(null);

frame.add(panel);

panel.add(btn);

frame.setLocation(80,100);

frame.setSize(200,100);

frame.setVisible(true);

这里,应注意:

1.   frame的默认布局理器被取消,人工设置了panel的尺寸大小和在容器中的位置;

2.setSize()方法用于设置组件尺寸大小,即宽度和高度,单位为像素;

3.setLocation()方法用于设置组件在容器中的位置,即组件的左上角,即组件的左上角顶点坐标,单位也是像素。

4.各个GUI容器都拥有自己的坐标系统(计算机的显示器屏幕也是一种GUI容器)

位置关系如图:

通过上图我们可以看到,布局在GUI程序设计中的地位是十分重要的。在GUI程序设计中容器对其中所包含组件的排列方式,包括组件的位置和大小的设定,被称为容器的布局(Layout)。它是指系统事先定义好的若干容器布局效果,使用它们可以方便地实现组件在容器的布局管理,并能够满足各种常规需要。例如,FlowLayout等。

注意:

 每一个容器都有默认的布局管理器,在创建一个容器对象时,同时也会创建一个相应的默认布局管理器对象,用户也可以随时为容器创建和设置新的布局管理器。 
方法:

 

容器对象.setLayout(布局管理器对象) 
布局管理器  容器对象.getLayout()

 因此,了解常用布局管理器就显得十分重要

FlowLayout:流式布局,是Panel(及其子类)类型容器的默认布局管理器类型。

布局效果:组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。组件按原始大小进行显示。

构造方法
public FlowLayout()//默认居中对齐,5个像素的水平和垂直间距
public FlowLayout(int align)//指定对齐方式
public FlowLayout(int align,int hgap,int vgap)//组件的水平和垂直间距

其中,对齐方式可以使用FlowLayout类中定义静态常量来设定,主要包括:
FlowLayout.LEFT     左对齐
FlowLayout.RIGHT    右对齐
FlowLayout.CENTER     居中对齐

示例1:流式布局的使用。

f.setLayout(new FlowLayout());

f.add(button1);

f.add(button2);

f.add(button3);

   效果如图:

注意:

 当容器f的尺寸被重置时,其中组件的位置也随之进行了调整,但组件的尺寸维持不变。

BorderLayout:边界布局,是Window及其子类类型容器的默认布局管理器。

布局效果:将整个容器范围划分成East、West、South、North、Center五个区域,组件只能被添加到指定的区域。

   如图:

值得注意的是:

  1. 每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃 。

  2. 在使用边界布局的容器中,组件的尺寸也被布局管理器强行控制,即与其所在区域的尺寸相同。

构造方法
public BorderLayout()
public BorderLayout(int hgap,int vgap)

示例2:BorderLayout的使用。

f.setLayout(new BorderLayout());//该语句去掉也可,Frame默认布局为BorderLayout

//向容器的不同方位添加组件,也可使用BorderLayout中定义的String常量来表示,例,NORTH、SOUTH、WEST、EAST等。

f.add(btnNorth,"North");

f.add(btnSouth,"South");

f.add(btnWest,"West");

    f.add(btnEast,"East");

f.add(btnCenter,"Center");//如不指名组件的加入位置,则默认加入到Center区域。

注意:

1.当容器的尺寸发生变化时,其中各组件相对位置不变,尺寸随所在区域进行缩放调整;

2.调整原则:北、南两个区域只能在水平方向缩放(宽度可调),东、西两个区域只能在垂直方向缩放(高度可调),中部区域都可缩放。

在实际学习过程中,我们需要了解Conpoment类的基本属性和操作方法:

Java GUI程序设计的更多相关文章

  1. java GUI,贷款服务器

    本习题来自<java语言程序设计--进阶篇>第30章,网络编程的习题. 题目描述:为一个客户端编写一个服务器.客户端向服务器发送贷款信息(年利率.贷款年限和贷款总额).服务器计算月偿还额和 ...

  2. java GUI之基本图形

    1.为了支持图形用户界面程序设计,java1.0的标准类库中包含一个抽象窗口工具箱(Abstract Window Toolkit,AWT). 这个工具箱极不成熟,其编程模型也不是面向对象的,有很大的 ...

  3. 20155212 实验二 Java面向对象程序设计

    20155212 实验二 Java面向对象程序设计 单元测试 三种代码 用编程去解决问题,必须学会写三种码: 伪代码 产品代码 测试代码 例: MyUtil 类解决一个百分制成绩转成"优.良 ...

  4. 20155319 实验二 Java面向对象程序设计

    20155319 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 (一) ...

  5. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  6. Java GUI 图书管理系统

    01 概述 一款功能强大的图书馆管理系统,功能齐全,小白/大学生项目实训,学习的不二之选. 02 技术 此系统使用 java awt 实现.java.awt是一个软件包,包含用于创建用户界面和绘制图形 ...

  7. 再见!【JAVA GUI】

    1.GUI概述 图形用户界面(Graphical User Interface,简称 GUI,又 称图形用户接口)是指采用图形方式显示的计算机操作用户界面. java作为一种面向对象的程序设计语言,它 ...

  8. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  9. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

随机推荐

  1. SaltStack salt-run 命令

    salt-run 常见用法如下: salt-run manage.up # 查看在线的minion salt-run manage.down # 查看不在线的minion salt-run manag ...

  2. linux 开机自启转载

    设置开机启动示例: # touch /etc/init.d/rc.local 设置为可执行: # chmod +x /etc/init.d/rc.local 用 update-rc.d 设置启动级别: ...

  3. Mac下Intellij IDea发布JavaWeb项目 详解三 (为所有Module配置Tomcat Deployment 并测试web 网页 配置Servlet)

    step4 为所有项目配置Deployment 4.1 如图 4.2 [+][Artifact] 4.3 将这里列出的所有内容选中后,点[OK] 4.4 选完是这样,表示,这三个java ee 项目会 ...

  4. Myeclipse10使用git

    用Myeclipse安装egit,使用官网最新地址或者下载最新的egit插件到本地安装均在team中看不到git,最后发现到http://download.eclipse.org/egit/updat ...

  5. Linux用户态程序计时方式详解

    前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序 ...

  6. openlayers中利用vector实现marker的方式

    项目需要一个小型的gis.openlayers,geoserver,postgres组合是比较好的选择. openlayers的marker层好像不支持拖动操作.通过研究api发现,可以利用vecto ...

  7. 【Spring源码深度解析学习系列】注册解析的BeanDefinition(五)

    对于配置文件,解析和装饰完成之后,对于得到的beanDefinition已经可以满足后续的使用要求了,还剩下注册,也就是processBeanDefinition函数中的BeanDefinitionR ...

  8. 【WEB前端系列之CSS】CSS3动画之Tranition

    前言 css中的transition允许css的属性值在一定的时间区间内平滑的过渡.这种效果可以在鼠标点击.获得焦点.被点击或对元素任何改变中触发,并圆滑的以动画效果改变CSS的属性值.语法: tra ...

  9. Clojure学习之比线性箭头操作

    1. 单箭头( -> ) 单箭头操作符会把其参数form迭代式地依次插入到相邻的下个一个form中作为该form的第一个参数.这就好像把这些form串起来了,即线性化(Threading). 由 ...

  10. javascript解析器原理

    浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的“JavaScript解析器”开始工作. JavaScript解析器工作步骤 1. “找一些东西”: v ...