java学习_08_图形用户界面GUI

博客内容仅作学习交流之用,详细内容参见网络资源,欢迎大家交流探讨!

 

Swing 

          图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

          Sun已经提供了一个跨平台GUI开发工具包AWT(Abstract Windows Toolkit,抽象窗口工具箱)。后来Sun又创建了一个新的GUI框架swing组件,解决了AWT存在的LCD问题。IBM认为swing比较消耗内存,创建了一个新的GUI库,这就是SWT。IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能强大的图形包”JFace”。

1 AWT

          AWT(Abstract Windows Toolkit)有4个主要的确定容器内组件的位置和形状,包括组件(Component)、容器(Container)、布局管理器(LayoutManager)和图形(Graphics)。

          Component(组件):按钮、标签、菜单等组件的抽象基本类;

          Container(容器):扩展组件的抽象基本类,例如Panel、Applet、Window、Dialog和Frame等由Container演变的类,容器中可以包含多个组件;

          LayoutManager(布局管理类):定义容器中组件的摆放位置和大小接口,Java中定义了几种默认的布局管理器;

          Graphics(图形):组件内与图形处理相关的类,每个组件都包含一个图形的对象。

          组件是Java图形用户界面程序设计的最基本组成部分,它是一个以图形方式显示的,并且可以与用户进行交互的界面组成元素,例如:按钮、标签、单选框、多选框等。单独的一个组件不能显示出来,必须将组件添加到容器(Container)当中才能显示。最常用的容器是窗口(Frame)和面板(Panel),Applet类时Panel类的子类。

          AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的,即它具有平台相关性,是系统对等类的实现。

 

2 Swing

          Swing是纯Java实现的轻量级(light-weight)组件,它不依赖系统的支持,弥补了AWT缺少剪切板、打印支持、弹出菜单和滚动窗口等缺点。因为100%纯Java实现,所以Swing具有Java的跨平台性。Swing不是真正的使用原生平台提供设备,而是仅仅在模仿,因此可以在任何平台上使用Swing组件。Swing绝大部分组件都是轻量级组件,它不像重量级组件那样必须在它们自己本地窗口中绘制,而是在它们所在的重量级窗口中绘制。Swing采用了MVC(Model-View-Controller,模式-视图-控制)的设计模式。

          在javax.swing包中有两种类型的组件:顶层容器(JFrame、Japplet、JDialog、JWindow)和轻量级组件,Java Swing是JFC(Java Foundation Classes)的一部分。

          Swing组件从功能上可以分为顶层容器、中间容器、特殊容器、基本控件、信息显示组件和编辑信息组件。

          (1)       顶层容器:JFrame、FApplet、JDialog、JWindow;

          (2)       中间容器:JPanel、JScrollPane、JSplitPane、JTollBar;

          (3)       特殊容器:JInternalFrame、JLayoutPane、JRootPane;

          (4)       基本控件:JButton、JComboBox、JList、JMenu、JSlider,JTextField;

          (5)       信息显示组件:JLabel、JProgressBar、ToolTip;

          (6)       编辑信息组件:JColorChooser、JFileChooser、JTable、JTextArea;

2.1 布局管理器

          组件在容器(container)(比如JFrame)中的位置和大小是由布局管理器来决定的。所有的容器都会使用布局管理器,通过它来自动进行组件的布局管理。使用布局管理器管理组件后,与之冲突的Java语言中的设置方法则不能骑作用。

          五大布局管理器:流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout),其中前三种是常见的布局管理器。

          流式布局管理器(FlowLayout):顺序布局管理器,按照组件的添加次序将组件从左到右放置在容器中。当达到容器的边界时,组件将放置在下一行中,FlowLayout可以以左对齐、居中对齐、右对齐的方式排列组件。是Panel和Applet缺省的布局管理。

          ①    不限制它所管理组件的大小,允许他们有最佳大小;

          ②    当容器被缩放时,组件的位置可能变化,但组件的大小不变;

          ③    默认组件是居中对齐,可以通过FlowLayout(int align)函数来指定对齐方式。

          边界布局管理器(BorderLayout):将容器简单的划分为东西南北中5个区域,中间区域最大,是Window、Frame、Dialog的缺省布局管理器。如果中间区域没有组件,则中间区域将会保留空白,如果四周的区域没有组件,中间区域将会补充。

          ①    不是五个部分都必须添加组件;

          ②    中部组件会自动的调整大小。

          网格布局管理器(GridLayout):将容器分割成多行多列,每个网格的大小一致,组件被填充到每个网格中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他的组件,当占满该行的所有网格后接着继续在下一个行从左到右放置组件。

          ①    组件的相对位置不随容器的缩放而变化,但是大小会变化;

          ②    所有组件的大小相同;

          ③    可以通过GridLayout(int row, int cols, int hgap, int vgap)来指定网格的行/列,水平间距和垂直间距。

          卡片布局管理器(CardLayout):将加入到容器中的组件视为卡片栈,把每个组件放置在一个单独的卡片上,而且每次只能看见一张卡片。

          网格包布局管理器(GridBagLayout):与网格布局管理器不同的是,一个组件不止占一个网格位置,因此在加入组件时,必须指明一个对应的参数,使用辅助类GridBagContraints。

          Swing有顶层容器,但不能讲组件直接添加到顶层容器中,而是添加到内容面板上。另外Swing新增了一个盒布局管理器(BoxLayout),允许水平(x轴)或者垂直(y轴)顺序布局一次添加组件。

2.2 常用组件

          面板组件JPanel

          在图形用户界面编程中,如果只是普通的组件布局,我们可以使用简单的布局管理器实现,但是比较复杂的布局要求就需要布局管理器的组合使用。

          ①    JPanel是JComponent的子类;

          ②    术语容器类组件,可以加入别的组件;

          ③    默认的布局管理为流式布局(FlowLayout)。

          其他常用组件:

          l  文本框(JTextfield);

          l  密码框(JPassWordField);

          l  标签(JLable);

          l  复选框(JCheckbox);

          l  单选框(JRadiobutton);

          l  下拉框(JComboBox);

          l  列表框(JList);

          l  滚动窗格(JScrollPane);

          l  拆分窗格(JSplitPane);

          l  多行文本框(JTextArea);

          l  选项卡窗格/页签标签(JTabbedPane);

          l  菜单条组件(JMenuBar);

          l  菜单组件(JMenu);

          l  菜单项(JMenuItem);

          l  工具条(JToolBar);

          同一组单选按钮必须先创建ButtonGroup,然后把单选框组件放入到ButtonGroup中。一般来说,列表框组件+滚动窗格组件是结合使用的,目的是让列表框中的选项可以有滚动支持。Jmenu中可以嵌套Jmenu构建多级菜单。

2.3 Swing特点

          (1)组件多样化:基础是AWT,但是具有更多的组件,所有组件都以字母“J”开头。增加了比较复杂的高级组件,例如:表格(JTable)、树(JTree)。

          (2)MVC模式:MVC模型的普遍适用性。Model用于保存所用到的数据,View用于显示数据内容,Controller用于处理用户和模块交互事件。Swing组件View和Controller合二为一,数据内容本省和显示与操作相分离。

          (3)可存取性支持:Swing组件都实现了Accessible接口,可以实现一些辅助功能,例如:屏幕阅读器。

          (4)支持键盘操作:JComponent类的registerKeyboardAction()方法可以实现用键盘操作代替鼠标操作,相当于传统意义的热键操作。

          (5)设置边框:设置多种边框,协助布局管理器布局。

          (6)使用图标(Icon):图标修饰组件。

2.4 Swing一般开发步骤

          GUI程序开发一般步骤:

          ①    引入相应的jar包;

          ②    创建顶层容器(继承JFrame等);

          ③    定义需要使用到的组件,创建组件;

          ④    设置布局管理器;

          ⑤    添加组件;

          ⑥    设置、显示窗体;

          ⑦    进行事件处理。

 

站在巨人的肩上才能看得更远,一步一个脚印才能走得更远。分享成长,交流进步,转载请注明出处!


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值