黑马程序员--图形用户界面GUI

------- android培训java培训、期待与您交流! ----------

1.GUI的概述

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

    GUI的包

      java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件.

      java.swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级控件.

GUI的继承体系

2.常见的布局管理器

    FlowLayout(流式布局管理器)它是Panel默认的布局管理器。

    BorderLayout(边界布局管理器)它是Frame默认的布局管理器。

    GridLayout(网格布局管理器)

    GridBagLayout(网格包布局管理器)

    CardLayout(卡片布局管理器)

    建立一个简单的窗体需要的方法:

       Frame():构造一个最初不可见的 Frame

       让窗体可见:public void setVisible(boolean b)

       窗体大小:public void setSize(int width,int height) 

       更改位置:public void setLocation(int x,int y)

       设置标题:public void setTitle(String title)

    简单的窗体的创建过程:创建窗体--设置窗体属性--让窗体可见


public class FrameDemo {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();
		// 设置窗体的属性
		f.setTitle("我的第一个窗口案例");
		f.setSize(400, 300);
		f.setLocation(400, 200);
		// 设置窗体可见
		f.setVisible(true);
	}
}

3.事件监听机制

    A:事件源 就是被事件作用的组件

    B:事件 就是发生的事情

    C:事件监听 把事件注册到事件源上

    D:事件处理 对应事件的处理结果

事件监听机制流程

public class FrameDemo {
	public static void main(String[] args) {
		// 创建窗体对象
		Frame f = new Frame();
		// 设置窗体的属性
		f.setTitle("添加按钮");
		f.setSize(400, 300);
		f.setLocation(400, 200);
		// 设置窗体的布局方式
		f.setLayout(new FlowLayout());
		// 创建按钮
		Button bu = new Button("我是按钮");
		// 添加组件
		f.add(bu);
		// 注册事件
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		// 给按钮注册事件
		bu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("我是按钮");
			}
		});
		// 设置窗体可见
		f.setVisible(true);
	}
}

鼠标事件

    用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口.

    addMouseListener添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。如果侦听器 l 为 null,则不会抛出异常并且不执行动作 

    void mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用 

    void mouseEntered(MouseEvent e) 鼠标进入到组件上时调用 

    void mouseExited(MouseEvent e) 鼠标离开组件时调用

    void mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用 

    void mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用

键盘事件

    用于接收键盘事件(击键)的侦听器接口,旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象KeyAdapter类(仅重写有用的方法).

    addKeyListener添加指定的按键侦听器,以接收发自此组件的按键事件。如果 为 null,则不会抛出异常并且不执行动作

    void keyPressed(KeyEvent e) 按下某个键时调用此方法 

    void keyReleased(KeyEvent e)  释放某个键时调用此方法 

    void keyTyped(KeyEvent e) 键入某个键时调用此方法

class MouseAndKeyEvent 
{
	
	private Frame f;
	private Button but;
	private TextField tf;
	//初始化时即进行基本设置
	MouseAndKeyEvent()
	{
		init();
	}

	public void init()
	{
		//创建窗体对象
		f = new Frame("my frame");
		//设置窗体属性
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		tf = new TextField(20);
		but = new Button("my button");
		//添加事件
		f.add(tf);
		f.add(but);
		myEvent();
		//窗口可见
		f.setVisible(true);
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//添加键盘监听
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{	
				int code = e.getKeyCode();
				if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
				{
					System.out.println(code+".....是非法的");
					e.consume();
				}
			}
		});

		//给But添加一个键盘监听。
		but.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{	
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
				System.out.println("ctrl+enter is run");
			}
		});

		/*
		//添加鼠标监听
		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)
			{
				if(e.getClickCount()==2)
					System.out.println("双击动作"+clickCount++);
			}
		});
		*/
	}
	public static void main(String[] args) 
	{
		new MouseAndKeyEvent();
	}
}

4.菜单继承体系

      MenuBar 菜单栏 

    Menu 菜单

    MenuItem 菜单项

    菜单栏上可以添加菜单,而每个菜单又可以添加菜单项.每个菜单项其实也可以是一个菜单.菜单栏和Frame的结合是通过FramesetMenuBar方法.

public class MyMenu2 {
	private Frame f;
	private MenuBar mb;
	private Menu m1, m2;
	private MenuItem mi1, mi2, mi3, mi4, mi5;
	private String name;
	public MyMenu2() {
		init();
		// 保存以前的标题
		name = f.getTitle();
	}
	private void init() {
		f = new Frame();
		// 设置属性
		f.setTitle("菜单案例");
		f.setBounds(400, 200, 400, 300);
		// 创建菜单栏
		mb = new MenuBar();
		m1 = new Menu("文件");
		m2 = new Menu("更改标题");
		mi1 = new MenuItem("好好学习");
		mi2 = new MenuItem("天天向上");
		mi3 = new MenuItem("恢复标题");
		mi4 = new MenuItem("打开记事本");
		mi5 = new MenuItem("退出");
		// 将菜单项添加到菜单,菜单添加到菜单栏
		m2.add(mi1);
		m2.add(mi2);
		m2.add(mi3);
		m1.add(m2);
		m1.add(mi4);
		m1.add(mi5);
		mb.add(m1);
		f.setMenuBar(mb);
		// 注册事件
		myEvent();
		// 设置可见
		f.setVisible(true);
	}
	private void myEvent() {
		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		mi4.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Runtime r = Runtime.getRuntime();
				try {
					r.exec("notepad");
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});

		mi5.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		mi1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String title = mi1.getLabel();
				f.setTitle(title);
			}
		});

		mi2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String title = mi2.getLabel();
				f.setTitle(title);
			}
		});

		mi3.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				f.setTitle(name);
			}
		});
	}
	public static void main(String[] args) {
		MyMenu2 m2 = new MyMenu2();
	}
}

学习感悟

    图形界面对于用户来说在视觉上更易于接受,我的理解是GUI就是给用户提供视觉体验和互动操作的,通过GUI极大地方便了非专业用户的使用.学习那这么些天,基本一直是在与代码打交道,在基础学习中GUI虽然不是很重要,但是将代码转化为看得见的窗口界面,感觉还是很不错的.






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值