黑马程序员_GUI

------- android培训java培训、期待与您交流! ----------
GUI概述
GUI 是Graphical User Interface(图形用户接口) 的缩写,用图形的方式来显示计算机操作的界面,这样更方便直观
计算机有两种方式和用户交互:
1,命令行,这种交互方式需要记住很多命令 比较麻烦
2,图形化界面 所有命令通过文字或者图形表现,方面直观
CLI Command line User Interface(命令行用户接口),就是常见的Dos 命令行操作,需要记住一些常用的命令,操作不直观
java 为GUI 提供的对象都在java.Awt 和java.Swing 

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

GUI继承关系

GUI 布局
容器中的组件排放方式就是布局
常见的布局管理器:
1,Flow Layout   (流式布局管理器)
从左到右的的序列排列组件,是Panel 默认的布局管理器
2,BorderLayout(边界布局管理器)
东,南,西,北,中 布局,是Frame 默认的布局管理器
3,GridLayout(网格布局管理器)
规则的矩阵
4,CardLayout(卡片布局管理器)
选项卡
5,GridBagLayout(网格包布局管理器)
非规则的矩阵
使用哪个布局管理器就创建哪个布局管理器对象
Frame 
以Frame 为例,了解Component的主要方法的使用
1,创建Frame窗体
new Frame() 对象
构造函数:
Frame()
Frame(String title);//定义窗体名字
2,对窗体进行基本设置
设置大小 setSize(int width, int height)
设置位置 setLocation(int x, int y)将组件移到新位置。
设置布局 setLayout(LayoutManager mgr)  设置此容器的布局管理器。 
3,定义组件
定义一个button组件
4,将组件通过窗体的add()方法添加到窗体中
5,让窗体显示
通过setVisible(true)方法实现
在开启一个图形化界面,就开启了一个线程
import java.awt.*;
class  AwtDemo
{
	public static void main(String[] args) 
	{
		//创建窗体,并设置窗体的名字
		Frame fr=new Frame("my awt");
		
		//设置大小
		fr.setSize(400,300);
		//设置位置  
		fr.setLocation(200,200);
		//设置布局为FlowLayout (要创建个布局管理器对象!!),Frame的默认布局是BorderLayout
		fr.setLayout(new FlowLayout());//参数为布局管理器对象
		//定义组件,并将组件添加到Frame中
		Button b=new Button("这是个按钮");
		fr.add(b);
		//使窗体可见。放在最后
		fr.setVisible(true);
		
		System.out.println("Hello World!");
	}
}
事件监听机制
只建立界面没有对界面按钮等建立效果,这就涉及到了事件监听机制
事件监听机制的组成
事件源(组件)
事件(event)
监听器(Listener)
事件处理(引发事件后处理方式)
事件监听机制的流程
有事件源(组件),将监听器注册到事件源中,当外部动作有监听器监听的动作作用到事件源上
就会产生事件对象,对象中封装着
事件源,监听器引发对事件的处理方式,将事件对象传给监听器的处理方式
监听机制的特点
1,事件源:awt包和swing 包中的图形界面组件
2,事件:每个事件源都有自己的特有的对应事件和共性事件
3,监听器: 将可以出发某个事件的动作(不止一个动作)都已经封装到了监听器中
4,事件处理
以上3个都在java中定义好了 ,可以直接获取对象使用,我们要做的是 对产生的动作进行处理
窗体事件
明确事件源后将监听器注册到事件源中
添加监听器:
addWindowListener(WindowListener l)
参数WindowListener 是一个接口,因此传的参数对象要实现接口的所有方法(7个方法)
方法很多实现会很麻烦,使用其子类 WindowAdapter
因为windowAdapter 已经实现了该接口,并覆盖了所有方法
只要继承WindowAdapter 覆盖需要的方法即可
常用方法:
需要关闭窗体 覆盖windowClosing(WindowEvent e)()方法
windowActived(WindowEvent e)(); 激活窗口时调用。//窗体在界面的最前端
windowOpened(WindowEvent e)(); 已打开窗口时调用。
import java.awt.*;
import java.awt.event.*;//WindowAdapter 是这个包中的
class  ListenerDemo
{
	public static void main(String[] args) 
	{
		
		Frame f=new Frame("My Listener");
		f.setSize(300,200);
		f.setLocation(200,200);
	//	f.addWindowListener(new MyListener());
	//内部类形式
	f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)//关闭窗体事件
			{
				System.out.println("关闭窗口");
				System.exit(0);
			}
			
			public void windowOpened(WindowEvent e)//打开窗体事件
			{
				System.out.println("我被打开了");
			}
			public void windowActivated(WindowEvent e)//激活窗体事件(注意方法名称拼写错误 windowActivated())
			{
				System.out.println("我被激活了,目前显示在最前端");
			}
		});
		f.setVisible(true);
		System.out.println("Hello World!");
	}
	
}
Action 事件
Component 的方法
setBounds(int x, int y, int width, int height) 
设置位置和窗体size
Button 按钮组件
方法:
addActionListener(ActionListener l)
  添加指定的动作侦听器,以接收发自此按钮的动作事件。
  ActionListener 接口是少数没有适配器的接口之一
  因为只有一个方法
  actionPerformed(ActionEvent e)发生操作时调用。
import java.awt.*; 
import java.awt.event.*;
class FrameDemo
{
	//定义类中所有组件的引用
	private Frame f;
	private Button b; 
	FrameDemo()	//	构造函数
	{
		init();//构造函数初始化时就具备该方法
	}
	public void init()//用来创建并设置窗体
	{
		f=new Frame();
		f.setBounds(200,100,400,300);
		f.setLayout(new FlowLayout());
		b=new Button("这是个按钮");
		f.add(b);
		myEvent();
		f.setVisible(true);	
	}
	public void myEvent() //事件,(类继承类 方法不能继承类 extends WindowAdapter)
	{
		//窗体事件,让窗体具备关闭功能
		f.addWindowListener(new WindowAdapter()//内部类
		{
			public void windowClosing(WindowEvent e)
			{
				System.out.println("窗口关闭");
				System.exit(0);
			}
		}	
		);
		//	让按钮具备退出功能
		//按钮就是事件源 ,添加监听器 addActionListener
	//	实例化 ActionListener 调用 actionPerformed(ActionEvent e)方法
	b.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e)//ActionEvent 不能忘记写
			{
				System.out.println("按钮窗口关闭");
				System.exit(0);
			}
	});	
	}
	public static void main(String[] args) 
	{

		new FrameDemo();
	}
}
鼠标事件 (共性事件)
addMouseListener(MouseListener l)添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。
MouseListener 有适配器MouseAdapter
具体的方法
mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用。
mouseEntered(MouseEvent e   鼠标进入到组件上时调用
mouseExited(MouseEvent e)      鼠标离开组件时调用
mousePressed(MouseEvent e)     鼠标按键在组件上按下时调用
mouseReleased(MouseEvent e)   鼠标按钮在组件上释放时调用。
addKeyListener(KeyListener l)
鼠标事件对象中有
getClickCount() 鼠标单击次数
//添加活动监听 
		//鼠标事件先执行,活动事件后执行,用键盘活动事件也执行,所以如果在按钮上添加事件的话要用活动事件
		b.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e)
			{
				System.out.println("活动监听");
			}
		}  );
		//添加鼠标监听事件
		b.addMouseListener(new MouseAdapter(){
			 int count=1;//内部类中定义的变量
			 int cl=1;
		public void mouseEntered(MouseEvent e)
			{ 		
				System.out.println("鼠标进入到按钮上"+count++);
			}

			public void mouseClicked(MouseEvent e)
			{
				if (e.getClickCount()==2)//如果鼠标点击两次 执行
				{
					System.out.println("鼠标点击(双击)"+cl++);
				}
				
			}
		});
键盘事件(共性事件)
addKeyListener(KeyListener l)
KeyListener 接口 有适配器对象KeyAdapter
具体方法:
keyPressed(KeyEvent e)按下某个键时调用此方法。
void keyReleased(KeyEvent e) 释放某个键时调用此方法。
keyTyped(KeyEvent e)     键入某个键时调用此方法。
KeyEvent 的方法
getKeyChar()
getKeyCode()
InputEvent 是KeyEvent 的父类它的方法
boolean isControlDown() //ctrl 是否按下
consume();   
//添加键盘监听
		b.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{// 按esc 就退出
				//if (e.getKeyCode()==KeyEvent.VK_ESCAPE)
				//按ctrl+enter 退出
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
				{
					System.exit(0);
				}
				//System.out.println(e.getKeyChar()+"......."+e.getKeyCode());
				//KeyEvent.getKeyText(e.getKeyCode); 
			}
		}	
		);
		//给文本框添加键盘监听
		tf.addKeyListener(new KeyAdapter(){
		public void keyPressed(	KeyEvent e)
			{
				int code=e.getKeyCode();
				if (!(code>=KeyEvent.VK_0&&code<= KeyEvent.VK_9))//如果键入的值不在1-0范围内
				{
					System.out.println(e.getKeyChar()+"不是数字");
					e.consume();
				}
			}
		});
GUI 菜单
MenuBar 菜单栏 或者菜单条
Frame中添加MenuBar 
为了将该菜单栏与 Frame 对象关联,可以调用该框架的 setMenuBar 方法。 
Menu(显示有箭头)
Menu Extends MenuItem
 menu add()可以添加菜单和条目
MenuItem(显示没有箭头)
方法 
添加活动监听器
addActionListener(ActionListener l)
了解菜单中菜单,菜单条 菜单项 的关系
import java.awt.*;
import java.awt.event.*;

class  MyMenuDemo
{
	private Frame f;
	private MenuBar mbar;
	private Menu me1,me2,subme;
	private MenuItem closemit,submit;
	MyMenuDemo()
	{
		init();
	}
	public void init()
	{
		f=new Frame("我的窗口");
		f.setBounds(200,100,600,500);
		f.setLayout(new FlowLayout());
		mbar=new MenuBar();
		me1=new Menu("文件");
		me2=new Menu("编辑");//菜单初始化可以指定名字
		subme=new Menu("子菜单");
		closemit=new MenuItem("退出");
		submit=new MenuItem("子项目");
		
	//没有先后顺序	
		f.setMenuBar(mbar);//设置框架的菜单栏
		mbar.add(me1);//菜单添加到菜单条上
		mbar.add(me2);
		me1.add(subme);
		me1.add(closemit);//菜单项添加到菜单上
		subme.add(submit);
		
		myEvent();
		f.setVisible(true);
	}
	public void myEvent()
	{
		//菜单项 添加监听器
		closemit.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e)//记住方法名字:actionPerformed()
			{
				System.exit(0);
			}
			});

		f.addWindowListener(new WindowAdapter(){
		
		public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
	public static void main(String[] args) 
	{
		new	MyMenuDemo();
	}
}

------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值