首页 > 代码库 > GUI(图形用户界面)
GUI(图形用户界面)
AWT概述
GUI全称是Graphical User Interface,即图形用户界面,即应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其它各种图形界面元素
GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称为AWT和Swing
Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。
AWT事件处理
事件处理机制
事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标、按下键盘等操作,就需要使用AWT的事件处理机制
常用事件分类
窗体事件
WindowEvent用于表示这些窗体事件,在应用程序中,当对窗体事件进行处理时,首先需要定义一个类实现WindowListener接口作为窗体监听器,然后通过addWindowListener()方法将窗体对象与窗体监听器绑定
鼠标事件
MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件,鼠标事件包括鼠标按下、鼠标松开、鼠标单击等。
对鼠标事件的处理可通过实现MouseListener接口或者继承适配器MouseAdapter类,然后调用addMouseListener()方法将监听器绑定到事件源对象
键盘事件
键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件
KeyEvent类表示键盘事件,处理KeyEvent事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类。
动作事件
在Java中,动作事件用ActionEvent类表示,处理ActionEvent事件的监听器对象需要实现ActionListener接口,但监听器对象在监听动作时,不会像鼠标事件一样处理鼠标个别的移动和单击的细节,而是去处理“按钮按下”这样“有意义”的事件。
布局管理器
FlowLayout流式布局管理器
使用FlowLayout布局管理器时,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列
BorderLayout边界布局管理器
是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以被放置在这五个区域的中任意一个。
GridLayout网格布局管理器
使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。
GridBagLayout网格包布局管理器
与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。
CardLayout卡式布局管理器
将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。
BoxLayout盒子布局管理器
不使用布局管理器
如果不希望通过布局管理器对容器进行布局,可以调用容器的setLayout(null)方法,将布局管理器取消。
不使用布局管理器时,程序必须调用容器中每个组件的setSize()和setLocation()方法或者是setBounds()方法(这个方法接收四个参数,分别是左上角的x、y坐标和组件的长、宽)来为这些组件在容器中定位
Swing
编程理念
MVC模式
模型M(数据)和视图V(显示)分离,通过控制器C将二者松散耦合在一起
观察者模式
迪米特法则
监听器(接口回调)
匿名内部类(就地实例化接口对象)
窗口类实现监听器接口并重写回调方法
内部类实现监听器接口并重写回调方法
创建内部类对象作为一个或多个控件的监听器
内部类可以访问外部类的私有成员(控件)
缺省适配器
MouseListener / MouseMotionListener / MouseWheelListener
MouseAdapter
KeyListener
KeyAdapter
WindowListener
WindowAdapter
窗口
JFrame
JFrame和Frame一样是一个独立存在的顶级窗口,不能放置在其它容器之中,JFrame支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等等
JDialog
JDialog是Swing的另外一个顶级窗口,它和Dialog一样都表示对话框
JDialog对话框可分为两种:模态对话框和非模态对话框。
非模态对话框
允许用户在处理对话框的同时与其它窗口交互
模态对话框
指用户需要等到处理完对话框后才能继续与其它窗口交互
JInternalFrame多文档窗口(子窗口)
JWindow无边框的窗口
中间容器
JPanel
和AWT中的Panel组件使方法基本一致,它是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。当然也可以使用构造函数JPanel(LayoutManager layout)或者它的setLayout()方法为其制定布局管理器。
JScrollPane带滚动条
带有滚动条的面板容器,而且这个面板只能添加一个组件,如果想往JScrollPane面板中添加多个组件,应该先将组件添加到JPanel中,然后将JPanel添加到JScrollPane中
JSplitPane带分割条
JTabbedPane带页签(选项卡)
JDesktopPane可以放子窗口
文本组件
用于接收用户输入的信息或向用户展示信息,其中包括文本框(JTextField)、文本域(JTextArea)等,它们都有一个共同父类 JTextComponent,JTextComponent是一个抽象类,它提供了文本组件常用的方法
JTextComponent 类有两个子类,分别是JTextField和JTextArea
JTextField:称为文本框,它只能接收单行文本的输入
JTextArea:JTextArea称为文本域,它能接收多行的文本的输入
按钮组件
常见的按钮组件有JButton、JCheckBox、JRadioButton等,它们都是抽象类AbstractButton类的直接或间接子类
JCheckBox组件被称为复选框,它有选中(是)/未选中(非)两种状态,如果用户想接收的输入只有“是”和“非”,则可以通过复选框来切换状态。如果复选框有多个,则用户可以选中其中一个或者多个。
JRadioButton组件被称为单选按钮,与JCheckBox复选框不同的是,单选按钮只能选中一个,就像收音机上的电台选择按钮,当按下一个,先前按下的按钮就会自动弹起,对于JRadioButton按钮来说,当一个按钮被选中时,先前被选中的按钮就会自动取消选中。
JComboBox
被称为组合框或者下拉列表框,它将所有选项折叠收藏在一起,默认显示的是第一个添加的选项。当用户点击组合框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示。
菜单组件
菜单组件分为下拉式菜单和弹出式菜单
下拉式菜单包括JMenuBar(菜单栏)、JMenu(菜单)和JMenuItem(菜单项)
JMenuBar:表示一个水平的菜单栏,它用来管理菜单,不参与同用户的交互式操作。
JMenu:表示一个菜单,它用来整合管理菜单项。菜单可以是单一层次的结构,也可以是多层次的结构。
JMenuItem:JMenuItem表示一个菜单项,它是菜单系统中最基本的组件。和JMenu菜单一样,在创建JMenuItem菜单项时,通常会使用 JMenumItem(String text)这个构造方法为菜单项指定文本内容
创建下拉式菜单的步骤如下所示:
1、创建一个JMenuBar菜单栏对象,将其放置在JFrame窗口的顶部
2、创建JMenu菜单对象,将其添加到JMenuBar菜单栏中
3、创建JMenuItem菜单项,将其添加到JMenu菜单中
在Java的Swing组件中,弹出式菜单用JPopupMenu表示
JPopupMenu弹出式菜单和下拉式菜单一样都通过调用add()方法添加JMenuItem菜单项,但它默认是不可见的,如果想要显示出来,则必须调用它的show(Component invoker,int x,int y)方法
常用控件
基本控件
JLabel标签
Icon
Font
JButton按钮
JTextField文本框
JPasswordField密码框
JRadioButton单选按钮ButtonGroup
JCheckBox复选框
JCombBox下拉列表ListCellRender
JList列表ListCellRender
JTextArea文本域
JOptionPane弹出式模态对话框
JFileChooser文件选择器
JColorChooser颜色选择器
高级控件
JMenu菜单JMenuItem菜单项
JPopupMenu上下文菜单(右键菜单)JMenuItem菜单项
JToolBar工具栏
JEditorPane编辑面板
JProgressBar进度条
JSlider滑动条
JSpinner微调器
JTable表格TableCellRender
JTree树TreeCellRender
AWT绘图
update(Graphics g)
repaint()
paint(Graphics g)
Swing绘图
paintComponent(Graphics g)
paintBorder(Graphics g)
paintChildren(Graphics g)
GUI(图形用户界面)