JAVA GUI编程
JAVA GUI编程
- 每篇一句 :道路一开始开辟的时候总是存在障碍的
- 初学心得: 原本下定决心才能开始的事情也变得理所当然
- (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ]
1.什么是界面
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受
2.Java 基础类 JFC 的基本概念
主要包含5 个 API: AWT, JavaD, Accessibility,Drag & Drop,Swing
它提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包
3.什么是组件(Component)
组件构成图形界面零部件面板按钮下拉选等等,具有图形界面,并能完成一定功能的封装体
4.什么是容器(Container)
用于包含其它组件的组件
5.什么是Swing
Swing 是 Java 平台的 UI —— 它充当处理用户和计算机之间全部交互的软件
它实际上充当用户和计算机内部之间的中间人
- Swing组件是Java语言提供的第二代GUI设计工具包
它以AWT为基础在AWT内容的基础上新增或改进了一些GUI组件使得GUI程序功能更强大设计更容易、更方便Swing 组件主要为文本处理、按钮、标签、列表、pane、组合框、滚动条、滚动 pane、菜单、表格和树提供了组件
- JButton 能显示文本和图形的按钮,它是AWT按钮组件的替代组件
- JCheckBox 能显示文本和图形的复选框,它是AWT选择组件的替代组件
- JCheckBoxMenuItem 一个复选框菜单项,它是AWT的复选框菜单项组件的替代组件
- JComboBox 带下拉列表的文本框,它是AWT选择组件的替代组件
- JComponent 所有轻量J组件的基类
- JDesktopPane 内部窗体的容器
- JDialog Swing对话框的基类,它扩展了AWT Dialot类
- JEditorPane 用于编辑文本的文本窗格
- JFrame 扩展java.awt.Frame的外部窗体
- JInternalFrame 在JDesktopPane中出现的内部窗体
- JLabel 可显示文本和图标的标签,它是AWT标签组件的替代组件
- JLayeredPane 能够在不同层上显示组件的容器
- JList 显示选项列表的组件,它是AWT列表组件的替代组件
- JMenu 菜单条中显示的一个菜单,它是AWT菜单组件的替代组件
- JMenuBar 用于显示菜单的菜单条,它是AWT菜单条组件的替代组件
- JMenuItem 菜单项,它是AWT菜单项组件的替代组件
- JOptionPane 显示标准的对话框,如:消息和问题对话框
- JPanel 通用容器,它是AWT面板和画布组件的替代组件
- JPasswordfield JTextField的扩展,使输入的字符不可见
- JPopupMenu 弹出式菜单,它是AWT弹出式菜单组件的替代组件
- JProgressBar 进度指示器
- JRadioButton 单选按钮,它是AWT复选框组件的替代组件
- JRootPane 顶层容器,它包含一个玻璃窗格,一个层窗格,一个内容窗格和一个可选的菜单条
- JScrollBar 滚动条,它是AWT滚动条组件的替代组件
- JScrollPane 滚动窗格,它是AWT滚动窗格组件的替代组件
- JSeparator 水平或垂直分隔条
- JSlider 滑杆
- JSplitPane 有两个分隔区的容器,这两个分隔区可以水平排列或者垂直排列且分隔区的大小能自动调整
- JTabbedPane 带选项卡的窗格
- JTable 表格
- JTableHeader 表格头
- JTextArea 用于输入多行文本的文本域,它是AWT文本域组件的替代组件
- JTestComponent 文本组件的基类,它替代AWT的TextComponent类
- JTextField 单行文本域,它替代AWT的单行文本域组件
- JTextPane 简单的文本编辑器
- JToggleButton 两种状态的按钮,它是JCheckBox和JRadioButton组件的基类
- JToolBar 工具条
- JToolTip 当光标停留在一个组件上时,该组件上显示的一行文字
- JTree 用于按钮层次组织数据的结构控件
- JViesport 用于浏览可滚动组件的视口
- JWindow 外部窗口,它是java.awt.Window的扩展
6.什么是AWT
AWT: AWT 是抽象窗口工具集(Abstract Window Toolkit)的英文缩写,为用户界面程序提供所需要的组件
- 例如按钮、标签、复选框、下拉菜单、画布、文本输入区、列表等
- 此外,AWT还提供事件类、监听器类、图形处理工具、2D 图形等的支持
- AWT 存在缺少剪贴板、打印支持等缺陷,甚至没有弹出式菜单和滚动窗口java.awt包,在这个包中,提供了基本的java程序GUI设计工具:
- Component/MenuComponent
- Container
- LayoutMaSwing: 不是真正使用原生平台提供设备,而是仅仅在模仿,因此可以在任何平台上使用Swing 图形用户界面组件
- Swing 绝大部分组件都是轻量级组件,它不像重量级组件那样必须在它们自己本地窗口中绘制,而是在它们所在的重量级窗口中绘制,它比AWT适应性更强Container(容器)
- 容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。
- 容器类对象可使用方法add()添加组件
两种主要的容器类型
- Window:可独立存在的顶级窗口
- Panel:可作为容器容纳其它组件,但不能独立存在,必须被添加到其它容器中(如Window 或 Applet)Container常用方法:
- add()
- setLocation():设置位置
- setSize():设置大小
- setBoundes():同时设置大小、位置
- setVisible()
- pack()Frame类:
- 代表一个窗口,是Window类的子类
- 有标题,可通过拖拉改变大小
- 初始化时为不可见,可用setVisible(true)使其显示出来
- 使用BorderLayout作为其缺省布局管理器
- 使用setLayout方法改变布局管理器Container的布局管理器
- AWT中的布局管理器有:
- FlowLayout
- BorderLayout
- GridLayout
- CardLayout
- GridBagLayout基本组件
- Button:按钮,可接收单击操作
- Canvas:用于绘图的画布
- Checkbox:复选框组件(也可变成单选框组件)
- CheckboxGroup:用于将多个Checkbox组件组合成一组,一组Checkbox组件将只有一个可以被选中,即全部变成单选框组件
- Choice:下拉式选择框组件
- Frame:窗口,在GUI程序里通过该类创建窗口
- Label:标签类,用于放置提示性文本
- List。列表框组件,可以添加多项条目
- Panel:不能单独存在基本容器类,必须放到其他容器中
- Scrollbar:滑动条组件。如果需要用户输入位于某个范围的值,就可以使用滑动条组件。如调色板中设置RGB的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、滑块的大小、最小值和最大值
- ScrollPane:带水平及垂直滚动条的容器组件
- TextArea:多行文本域
- TextField:单行文本框AWT的事件处理方式
- 委派式事件处理(delegation)----个别的组件将整个事件处理委托给特定的对象,当该组件发生指定的事件时,就通知所委托的对象,有这个对象来处理这个事件,这个受委托处理事件的对象称为事件倾听对象(event listener)
- 每个组件均可以针对特定的事件指定一个或多个事件倾听对象,由这些事件倾听对象负责处理事件创建菜单 :创建一个菜单步骤:
- 创建一个MenuBar对象,将其放置到菜单容器中(如Frame)
- 创建若干个Menu对象,将其放置到MenuBar对象中
- 创建若干个MenuItem对象,将其放置到Menu对象中MenuItem包括
- MenuItem:普通的菜单项
- CheckboxMenuItem:可以选择的菜单项右键菜单 :右键菜单使用PopupMenu对象表示,创建右键菜单的步骤如下:
- (1)创建PopupMenu的实例
- (2)创建多个MenuItem实例,依次将这些实例加入PopupMenu中
- (3)将PopupMenu加入到目标组件之中
- (4)为需要出现上下文菜单的组件编写鼠标监听器,当用户释放鼠标右键时弹出右键菜单AWT中画图:创建Canvas类或Panel的子类,并覆盖paint方法
- 每当组件出现时调用paint方法
- 每个组件都有一个Graphics对象
- Graphics类实现了很多绘图方法Graphics类:Graphics是一个抽象的画笔对象,Graphics可以在组件上绘制丰富多彩的几何图形和位图,Graphics类提供了如下几个方法用于绘制几何图形和位图
- drawLine:绘制直线
- drawString:绘制字符串
- drawRect:绘制矩形
- drawRoundRect:绘制圆角矩形
- drawOval:绘制椭圆形状
- drawPolygon:绘制多边形边框
- drawArc:绘制一段圆弧(可能是椭圆的圆弧)
- drawPolyline:绘制折线
- fillRect:填充一个矩形区域
- fillRoundRect:填充一个圆角矩形区域
- fillOval:填充椭圆区域
- fillPolygon:填充一个多边形区域
- fillArc:填充圆弧和圆弧两个端点到中心连线所包围的区域。
- drawImage:绘制位图
7.菜单和列表
JMenu/JMenuItem/JMenuBar(菜单、菜单项、菜单条)
1.菜单条:类JMenuBar的实例就是菜单条。例如,以下代码创建菜单条对象menubar:
JMenuBar menubar = new JMenuBar();
在窗口中增设菜单条,必须使用JFrame类中的setJMenuBar()方法
例如,代码:setJMenuBar(menubar);类JMenuBar的常用方法有:
- add(JMenu m):将菜单m加入到菜单条中
- countJMenus():获得菜单条中菜单条数
- getJMenu(int p):取得菜单条中的菜单
- remove(JMenu m):删除菜单条中的菜单m2. 菜单:由类JMenu创建的对象就是菜单,类JMenu的常用方法如下:
- JMenu():建立一个空标题的菜单
- JMenu(String s):建立一个标题为s的菜单
- add(JMenuItem item):向菜单增加由参数item指定的菜单选项
- add(JMenu menu):向菜单增加由参数menu指定的菜单。实现在菜单嵌入子菜单
- addSeparator():在菜单选项之间画一条分隔线
- getItem(int n):得到指定索引处的菜单项
- getItemCount():得到菜单项数目
- insert(JMenuItem item,int n):在菜单的位置n插入菜单项item
- remove(int n):删除菜单位置n的菜单项
- removeAll():删除菜单的所有菜单项3.菜单项:类JMenuItem 的实例就是菜单项。类JMenuItem的常用方法如下:
- JMenuItem():构造无标题的菜单项
- JMenuItem(String s):构造有标题的菜单项
- setEnabled(boolean b):设置当前单项是否可被选择
- isEnabled():返回当前菜单项是否可被用户选择
- getLabel():得到菜单项的名称
- setLabel():设置菜单选项的名称
- addActionListener(ActionListener e):为菜单项设置监视器。监视器接受点击某个菜单的动作事件
8.事件监听
什么是事件
- 用户用于交互而产生的键盘或鼠标动作
- 响应用户的动作称为处理事件JAVA事件的委托机制
- 1.事件源先注册好监听器(监听器负责监听事件的产生),(监听器是实现监听器接口的类,监听器接口定义了一个要成为监听器的类应该实现的方法,同时监听器接口都继承与监听器接口基类java.util.EventListener 虽然这个接口没有定义任何需要实现的方法,但是它有它的用途,它作为一种标志,标志着继承自它的接口是监听器接口)
- 2.事件源产生事件(前提: 声明好相应的事件类,事件类都必须继承自JAVA的事件基类java.util.EventObject,EventObject(Object source)是EventObject唯一的构造方法,这意味着所有事件必须在实例化时就指定事件源,这一点很好,要求在产生事件的时候明确 是谁产生的 为后面的寻根提供保障)
- 3.事件源广播事件给任意一个在它上面注册的监听器
- 4.监听器接受事件并执行相应的事件处理方法
9.事件的处理机制
Java的事件处理机制
- 1.事件源(event source)
事件源是一个能够注册监听器对象并发送事件对象的对象。例如按钮或者滚动条就是事件源
- 2.事件,事件类型和事件对象
事件一般是用户在界面上的一个操作,当一个事件发生时,该事件用一个事件对象来表示,事件对象有对应的事件类
不同的事件类描述不同类型的用户动作,不同的事件源可以产生不同类别的事件。例如,按钮可以发送ActionEvent对象,而窗口可以发送WindowEvent对象,在Java中,所有的事件对象都最终派生于java.util.EventObject类
- 3.事件监听器(event listener)
监听器对象是一个实现了特定监听器接口(listener interface)的类的实例
事件监听器类(监听器对象所属的类)必须实现事件监听器接口或继承事件监听器适配器类
事件监听器接口定义了处理事件必须实现的方法
事件监听器适配器类是对事件监听器接口的简单实现。目的是为了减少编程的工作量
处理事件的方法被称为事件处理器,即事件监听器接口定义,并在事件监听器类中实现的方法
- 4.注册事件监听器
为了能够让事件监听器检查某个组件(事件源)是否发生了某些事件,并且在发生时激活事件处理器进行相应的处理,必须在事件源上注册事件监听器
这是通过使用事件源组件的以下方法来完成的:
addXxxListener(事件监听器对象)
Xxx对应相应的事件类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通