zoukankan      html  css  js  c++  java
  • GUI__【GUI概述】【布局】【Frame】【事件监听机制】【窗体事件】【按钮】【鼠标事件】【键盘事件】【Dialog对话框】【菜单】


    GUI概述:

    GUI

    Graphical User Interface(图形用户接口)。
    用图形的方式,来显示计算机操作的界面,这样更方便更直观。

    CLI
    Command line User Interface (命令行用户接口)
    就是常见的Dos命令行操作。 需要记忆一些常用的命令,操作不直观。

    Awt与 Swing
    java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。(即依赖于系统资源,跨平台性较差)
    javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。(跨平台性较强)

    Swing组件的继承体系:

    该体系要记清楚,便于开发时查阅API文档

    -----------------------------------------------------------------------------------------------------------

    布局

    容器中的组件的排放方式,就是布局。
    常见的布局管理器:
    FlowLayout
    (流式布局管理器)从左到右的顺序排列。
    Panel 默认的布局管理器。
    BorderLayout(边界布局管理器)东,南,西,北,中
    Frame 默认的布局管理器。
    GridLayout(网格布局管理器)规则的矩阵
    CardLayout(卡片布局管理器)选项卡
    GridBagLayout(网格包布局管理器)非规则的矩阵

    其它高级布局:坐标式布局


    Frame 是带有标题和边框的顶层窗口。

    创建图形化界面的基本步骤:

    1,创建Frame窗体
    2,对窗体进行基本设置:大小、位置、布局等
    3,定义组件:按钮、标签、复选框、文本组件等
    4,将组建通过窗体的add方法添加到窗体中
    5,让窗显示,通过setVisible(True)方法


    事件监听机制

    事件监听机制的特点:
    1,事件源(组件):Awt或Swing包中图形界面组件
    2,事件(Event):每一个女事件源都有自己特有的对应事件和共性事件
    3,监听器(Listener):封装了可以触发某一个事件的动作(不止一个),监听器往往还具备适配器
    4,事件处理
    (引发事件后处理方式)

    123在java中都已经定义好了,我们要做的事情是:对产生的事件进行处理


    ------------------------------------------------------------------------------------

    窗体事件

    监听器隶属于awt.event包,
    class MyListener implements WindowListener
    {七个方法}
    直接实现的话需要覆盖该接口的7个抽象方法,而需要用的方法可能只有一个
    WindowListener 的子类WindowAdapter(适配器)实现了该接口,并覆盖了所有方法,我们只需继承WindowAdapter类并覆盖我们需要的方法即可

    创建一个带监听器的窗口:

    import java.awt.*;
    import java.awt.event.*;//子包
    class AwtDemo 
    {
    	public static void main(String[] args) 
    	{	
    		Frame f = new Frame("my Awt");	//构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
    		f.setSize(618,400);		//设置宽高
    		f.setLocation(300,200);	//设置在屏幕上坐标位置
    		f.setLayout(new FlowLayout());	//设置流式布局
    		Button b = new Button("这是一个按钮");//创建按钮,默认为边界布局
    		f.add(b);				//往容器里添加按钮
    
    		f.addWindowListener(new WindowAdapter()
    		{		//使用适配器,添加监听器
    			public void windowClosing(WindowEvent e){//覆盖父类方法,窗口正处在关闭过程中时调用。
    				System.out.println("关闭窗口");//打印
    				System.exit(0);		//关闭程序,这个动作最为常见
    			}
    			public void windowActivated(WindowEvent e){//窗口处于最前端
    				System.out.println("激活窗口");
    			}
    			public void windowOpened(WindowEvent e){//打开窗口时触发
    				System.out.println("已打开窗口");
    			}
    		});	
    		f.setVisible(true);
    	}
    }

    WindowEvent:即窗体事件,指示窗口状态改变的低级别事件。当打开、关闭、激活、停用、图标化
    或取消图标化 Window 对象时,或者焦点转移到 Window 内或移出 Window 时,由 Window 对象生成此低级别事件

    按钮监听

    需求

    让按钮具备退出程序的功能;按钮就是事件源,应该选择哪个监听器呢?
    通过关闭窗体示例了解到:要想知道哪个组件具备什么监听器,需要查看该组件对象的功能
    查阅APT文档,button按钮支持一个特有监听器addActionListener(ActionListener);
    ActionListener:事件监听器接口
    该接口只有一个方法:void actionPerformed(ActionEvent e) 发生操作时调用 

    适配器的作用是为了便于调用监听器的方法,一般方法超过三个的监听器都具备适配器,ActionListener只有一个方法就没必要使用适配器了,直接继承即可

    将窗体事件的代码优化并演示按钮:

    import java.awt.*;
    import java.awt.event.*;
    class  FrameDemo
    {
    	private Frame f;//定义组件的引用
    	private Button but;
    	FrameDemo(){				//构造方法
    		init();	//调用方法
    	}
    	public void init()			//初始化窗体
    	{
    		f = new Frame("my Frame");
    		f.setBounds(300,200,600,400);//移动组件并调整其大小。600*400
    		f.setLayout(new FlowLayout());//设置布局
    		but = new Button("mu Button");//设置按钮
    		f.add(but);					//将组件添加到窗体
    
    		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("按钮退出");
    				System.exit(0);
    			}
    		});
    	}
    	public static void main(String[] args){
    		FrameDemo f = new FrameDemo();
    	}
    }


    鼠标事件

    查看API,Button的父类Component方法void addMouseListener(MouseListener l) 添加鼠标侦听器,使用MouseListener接口及其适配器,进行鼠标事件的侦听

    示例:

    	private void myEvent()		//封装事件,都是以内部类的形式
    	{
    		f.addWindowListener(new WindowAdapter(){//窗体监听适配器,窗体退出功能
    			public void windowClosing(WindowEvent e){//窗体事件
    				System.out.println("窗体退出");
    				System.exit(0);
    			}
    		});
    		but.addActionListener(new ActionListener(){//接口型内部类,按钮活动监听
    			private int signal = 1;	//该监听器的按钮使用鼠标和键盘都可以操作
    			public void actionPerformed(ActionEvent e){
    				System.out.println("ActionListener:"+signal++);
    			}
    		});
    		but.addMouseListener(new MouseAdapter(){//鼠标监听适配器,按钮监听,
    			private int count = 1;
    			private int flag = 1;
    			public void mouseEntered(MouseEvent e){//鼠标进入事件
    				System.out.println("鼠标进入按钮:"+count++);
    			}
    			public void mouseClicked(MouseEvent e){//点击鼠标事件
    				if(e.getClickCount()==2)	//鼠标动作,双击时触发
    					System.out.println("双击鼠标:"+flag++);
    			}
    		});
    	}
    ActionListener事件监听可以对鼠标和键盘事件都做出反馈;MouseListener 鼠标监听只监听鼠标事件


    如果一个按钮上同时具备Action和Mouse两个监听器,一般来说会先执行鼠标监听器,因为它的动作更具体
    但是偶尔也会有先执行Action的情况;运行结果如下左图:

    鼠标监听可以根据鼠标事件的动作来决定,例如可以设置每次操作点击鼠标次数来决定反应,运行结果如下右图:



    键盘事件:

    使用Component中方法void addKeyListener(KeyListener l)添加针对键盘事件的监听器,使用KeyListener接口及其适配器,使用KeyEvent控制规则

    给按钮添加一个键盘监听

    		but.addKeyListener(new KeyAdapter(){//给but添加一个键盘监听
    			public void keyPressed(KeyEvent e){
    				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)//规则:组合键Ctrl+Enter时触发
    					sop("Ctrl+Enter");
    //					System.exit(0);
    //				sop(KeyEvent.getKeyText(e.getKeyCode())+" : "+e.getKeyCode());//输出键盘上对应键的 名称+值
    				}
    			});

    文本组件中的键盘监听

    //构造初始化:
    TextField tf = new TextField(10);//创建文本框,长度为10
    f.add(tf);//添加文本框
    //在myEvent()中添加监听器:
    		tf.addKeyListener(new KeyAdapter(){//给tf文本框添加键盘监听
    			public void keyPressed(KeyEvent e){
    				int code = e.getKeyCode();
    				if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){//
    					sop("非法数值!");
    					e.consume();//一旦满足条件,不使用默认的执行
    				}
    			}
    		});
    

    Dialog对话框:

    在触发某一事件时弹出对话框提醒用户

    创建时需要关联窗体,方法与窗体类似可以添加按钮,设置标签Label,通过setVisible(boolean b);来控制弹出和消失

    菜单

    继承体系如图:


    MenuBar,Menu,MenuItem
    先创建菜单条,再创建菜单,每一个菜单中建立菜单项。
    也可以菜单添加到菜单中,作为子菜单。
    通过setMenuBar()方法,将菜单添加到Frame中。

    详细用法参见API及后续练习



  • 相关阅读:
    ssm批量删除
    java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
    springMVC中的日期格式的转化
    常用(二)
    ssm上传文件
    redis命令
    redis的下载与安装(linux版)
    解决Maven项目pom.xml文件报xxx argetclassesMETA-INFMANIFEST.MF (系统找不到指定的路径)问题
    flex布局元素操作详情
    彩色小球的重现以及下雪效果的实现
  • 原文地址:https://www.cnblogs.com/Joure/p/4337206.html
Copyright © 2011-2022 走看看