热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GUI(图形用户界面)

AWT概述GUI全称是GraphicalUserInterface,即图形用户界面,即应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其它各种图形界面元素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)


推荐阅读
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • HTML中span元素为何会脱离li元素对齐?
    在HTML布局中,有时会遇到span元素未能与li元素保持对齐的问题。本文将探讨这一现象的原因,并提供解决方案。 ... [详细]
  • 通过利用代码自动生成技术,旨在减轻软件开发的复杂性,缩短项目周期,减少冗余代码的编写,从而显著提升开发效率。该方法不仅能够降低开发人员的工作强度,还能确保代码的一致性和质量。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
author-avatar
一直都在囚禁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有