GUI -- Graphical User Interface (图形用户界面 )
用比较直观方便的图形方式显示操作界面
CLI -- Command line User Interface (命令行用户接口)
Dos命令行操作 , 需要记住操作指令, 操作不直观
java 两大GUI 对象包 java.awt 和 javax.swing ┃
┃ ┗━━在AWT基础上 建立图形界面系统 提供更多组件 具有跨平台性 增强移植性
┗━ABstract Window Toolkit (抽象窗口工具包) 需调用本地方法实现功能 依赖于运行平台 是重量级控件
继承体系
Component
┣━ Button 按钮
┣━ Canvas 画布
┣━ Checkbox 复选框
┣━ Choice 弹出式选择菜单
┣━ Label 单行文本标签
┣━ List 可滚动的文本项列表
┣━ Scrollbar 滚动条
┣━ TextComponent 允许编辑文本的组件的超类
┃ ┣━ TextArea 显示文本的多行区域。可以将它设置为允许编辑或只读。
┃ ┗━ TextField 允许编辑单行文本的文本组件。
┗━ Container 容器 -- 一般的AWT容器对象 , 是一个可通过add方法添加其他 AWT 组件的组件 内部是通过封装集合来实现的
┣━ BasicSplitPaneDivider
┣━ CellRendererPane
┣━ DefaultTreeCellEditor.EditorContainer
┣━ JComponent 该类是除顶层容器外所有 Swing 组件的基类。要使用继承自 JComponent 的组件,
┃ 必须将该组件置于一个根为顶层 Swing 容器的包含层次结构(containment hierarchy)中。
┣━ ScrollPane 单个子组件的自动水平和/或垂直滚动的容器类
┣━ Window 窗体 一个没有边界和菜单栏的顶层窗口。窗口的默认布局是 BorderLayout。
┃ ┣━ BasicToolBarUI.DragWindow
┃ ┣━ JWindow 对象是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是 BorderLayout。
┃ ┣━ Frame 框架 -- 是带有标题和边框的顶层窗口。
┃ ┃ ┗━ JFrame 在javax.swing 包中 是 Frame 的扩展版本
┃ ┗━ Dialog 对话框 --是一个带标题和边界的顶层窗口,边界一般用于从用户处获得某种形式的输入
┃ ┣━ FileDialog 文件对话框 -- 显示一个对话框窗口,用户可以从中选择文件。
┃ ┗━ JDialog 是 Dialog 的扩展类 在 javax.swing 包中
┃
┗━ Panel 面板 -- 是最简单的容器类。应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板。
┃ 面板的默认布局管理器是 FlowLayout 布局管理器。
┗━ Applet 是一种不能单独运行但可嵌入在其他应用程序中的小程序。
┗━ JApplet 是javax.swing包的组件 是 Applet 的扩展版
布局管理器 -- 管理容器中组件排放
常见布局管理器
FlowLayout (流式布局管理器)
>从左到右顺序排列 默认居中 自左而右 自上而下自动填充
>Panel 默认的布局管理器
BorderLayout(边界布局管理器)
>东西南北中 每个区域最多只能包含一个组件 , 不指定方位时 自动占据整个容器 默认居中
>Window 窗体的 默认布局管理器
CardLayout(卡片布局管理器)
>选项卡 将容器中的每个组件看作一张卡片。一次只能看到一张卡片
GridLayout(网格布局管理器)
>规则矩阵 容器被分成大小相等的矩形,一个矩形中放置一个组件
GridBagLayout(网格包布局管理器)
>非规则矩阵 它不要求组件的大小相同
一个界面可以一种或多种布局方式
先划分界面为不同面板 -->不同面板可以采取不同布局
图形界面是通过另外的线程来执行的 , 开启窗体就会多一个线程
窗体创建与设置
setBounds(int x ,int y , int b , int h) 可以设置窗体横纵坐标及宽高
事件监听机制
ppt java08GUI -8 图
外部触发动作作用于
↓
事件源(组件)产生---->事件对象传递给---->监听器(事件处理方式)注册到---->事件源--->┒
┖<----------------------------------------<--------------------- -------------------------------------------<┚
动作(鼠标单击 双击 键盘输入)作用于事件源(按钮 文本框 等awt swing包中图形界面组件)
产生异常状况封装为对象 称为事件对象 不同的动作产生不同的事件对象 将触发事件的动作会被
监听器监听到 监听器根据不同动作用对应的处理方式处理事件
我们能做的就是对产生的事件进行处理
事件 监听 有关的接口和事件
以+Listener 后缀的是监听器接口 EventListener 是所有事件监听器接口的超接口 监听接口方法在三个以上时有对应的适配器
|--- ActionListener 实现此接口的类创建的对象可使用组件的 addActionListener 方法向该组件注册。
在发生操作事件时,调用该对象的 actionPerformed 方法。可以接收来自鼠标或键盘的动作产生的事件
|--- MouseListener
|--->mouseClicked(MouseEvent e) 监听鼠标单击(按下并释放)组件时产生事件
|--->mouseEntered(MouseEvent e)监听鼠标进入组件时产生事件
|---> mouseExited(MouseEvent e)监听鼠标离开组件产生事件
|---> mousePressed(MouseEvent e)监听鼠标按在组件上时产生事件
|---> mouseReleased(MouseEvent e)监听鼠标按在组件上释放时事产生事件
|--- KeyListener
|---> keyPressed(KeyEvent e) 监听按下某个键时产生的事件。
|---> keyReleased(KeyEvent e) 监听释放某个键时产生的事件。
|--- > keyTyped(KeyEvent e) 监听键入某个键时产生的事件。
以+Event 后缀的是事件源类
|--- ActionEvent 鼠标或键盘等动作使组件活动是产生事件
|--- MouseEvent 鼠标触发的事件
|--- KeyEvent 键盘触发的事件
以+Adapter 后缀的是用于接收事件对象的适配器 是实现了监听器但方法为空的抽象, 此类存在的目的是方便创建侦听器对象
WindowListener 接口
WindowEvent
WindowAdapter
addWindowListener(new WindowAdapter ()
{
});
窗体 addWindowListener(WindowListener w) 接收的是窗体动作事件
按钮 addActionListener(ActionListener a) 接收的是按钮动作事件
鼠标事件 键盘事件
实例分析
import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
//外部建立对象引用
private Frame f;
private Button but;
private Button but1;
//类实例创建就调用方法创建Frame对象, 初始化,事件加载
FrameDemo()
{
init();
}
public void init()
{
//创建 Frame
f = new Frame(" my Frame ");
//Fame基本设置
f.setBounds(300,200,500,800);
f.setLayout(new FlowLayout());
//添加组件
but = new Button("Button1");
but1 = new Button("Button2");
f.add(but);
f.add(but1);
//加载窗体上的事件
myEvent();
//显示窗体
f.setVisible(true);
}
private void myEvent()
{
//向窗体添加窗体事件监听器 并复写监听器方法(事件产生的动作)
f.addWindowListener(new WindowAdapter()
{//用匿名内部类来定义事件源
public void windowClosing(WindowEvent e)
{ System.out.println("窗体关闭");
System.exit(0);
}
});
//向添加按钮组件活动事件监听器 并复写监听器方法(事件产生的动作)
but.addActionListener(new ActionListener()
{
//按钮活动时发生事件
public void actionPerformed(ActionEvent e)
{
System.out.println("按钮活动事件");
}
});
//向按钮添加鼠标事件监听器 并复写监听器方法(事件产生的动作)
but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
//鼠标进入组件时产生事件
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入了该组件"+count++);
}
//鼠标单击是产生事件
/*public void mouseClicked(MouseEvent e)
{
System.out.printl("鼠标单击动作"+clickCount++);
}*/
//鼠标双击时产生事件
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("鼠标双击动作"+clickCount++);
}
});
//向But1组件添加键盘监听器 并复写监听器方法(事件产生的动作)
but1.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
System.out.println(e.getKeyChar()+"------"+KeyEvent.getKeyText(e.getKeyCode()));
if()
}
});
}
public static void main(String[] args)
{
new FrameDemo();
}
}
继承关系
MenuComponent 接口
┣ MenuBar 菜单栏 可以添加 Menu 菜单
┗ MenuItem 菜单项
┣ Menu 菜单 可以添加 Menu 或者 MenuItem 或者 CheckboxMenuItem
┗ CheckboxMenuItem 菜单复选框
Menu
↓↑
添加关系 Frame <--- MenuBar <--- Menu ← MenuItem
↑
CheckboxMenuItem