java [GUI]

 

 

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


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值