黑马程序员_GUI

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

一.概述

  1.GUI:Graphical User  Interface 图形用户接口。

      用图形的方式,来显示计算机操作的界面,这样更方便更直观。

  2.CLI:Commond line User Interface命令行用户接口。

     就是常见的Dos命令行操作。

      需要记忆一些常用的命令,操作不直观。

  3.Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

         java.Awt:Abstract Window Toolkit抽象窗口工具包,需要调用本地系统的方法实现功能,和系统的依赖性稍强,属于重量级控件。Awt包中主要的四个类:

              组建类(Component),容器类(Container),图形类(Graphics),布局管理器类(Layoutmanager和LayoutManager2)。

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

 4.继承关系图

   

  

      Container:为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。

      Container常用子类:Window Panel(面板,不能单独存在。)

      Window常用子类:Frame Dialog

二.布局管理器

  1.布局:就是容器中的组件的排放方式。

  2.常见的布局管理方式:

     FlowLayout(流式布局管理器)从左到右的顺序排列,Panel默认的布局管理器。

     BorderLayout(边界布局管理器)东,南,西,北,中,Frame默认的布局管理器。

     GridLayout(网格布局管理器)规则的矩阵。

     CardLayout(卡片布局管理器)选项卡。

     GridBagLayout(网格包布局管理器)非规则的矩阵。

三.创建图形化界面

  1.创建frame窗体。

  2.对窗体进行基本设置。

  3.定义组件。

  4.将组件通过窗口的add()方法添加到窗体中。

  5.让窗体显示,通过setVisible(true)。

 代码:

import java.awt.*;
public class AwtDemo {
	public static void main(String[] args) {
		// 创建frame窗体,窗体的标题为my awt
		Frame f = new Frame("my awt");
		// 设置窗体的大小
		f.setSize(200, 300);
		// 设置窗体的显示位置
		f.setLocation(200, 200);
		// 设置窗体的布局
		f.setLayout(new FlowLayout());
		// 创建按钮组件,可以定义按钮显示的内容
		Button b = new Button("按钮");
		// 将组件添加到窗体中
		f.add(b);
		// 设置窗体的可见性
		f.setVisible(true);
	}
}

四.事件监听机制

  1.组成:

     事件(Event)      事件源     监听器(Listener)  事件处理

  2.特点:

    事件源:就是Awt包中或者Swing包中的那些图形用户界面组件。

    事件:每一个事件源都有自己特有的对应事件和共性事件。(鼠标事件,键盘事件)

    监听器:将可以出发某一事件的动作(不止一个)封装到监听器中。

    事件处理:引发事件后处理方式。就是与用户的交互行为。

   3.事件监听机制流程图

  

  4.注意:

     事件源,事件,监听器在java中已经定义好了,我们只需要做的就是事件处理。

  5.步骤:

    a.确定事件源。

    b.通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener

       的子类XXXAdapter的子类对象。

  一般用匿名内部类来表示。方法的参数一般是XXXEvent类型的变量接收。

    代码:

 f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);//程序退出
			}
			public void  WindowActivated(WindowEvent e)
			{
				System.out.println("我活了");
			}
			public void  WindowOpened(WindowEvent e)
			{
				System.out.println("我被打开了");
			}
		});

   注意:

        事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

五.键盘  鼠标事件

    代码:

import java.awt.*;
import java.awt.event.*;

//键盘  鼠标事件

class MouseAndKeyEvent 
{   
	//定义该图形中所需的组件的引用。
	private Frame f;
	private Button but;
	private TextField tf;
    //构造函数,初始化对象
	MouseAndKeyEvent()
	{
		init();
	}

	public void init()
	{   //创建窗体,窗体的标题为my frame
		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添加键盘监听
		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.exit(0);
				System.out.println("ctrl+enter is run");

				}
		});

        //为but添加鼠标监听
		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();//创建对象,使程序运行
	 }
}

六.菜单 FileDialog的使用

   1.继承体系

        

   

       Menu:菜单,继承MenuItem;有右三角的图标存在,可添加MenuMenuItem

      MenuBar:菜单条,可添加菜单和菜单项。

       MenuItem:菜单项,无右三角的图标存在,是最终的菜单项。

   2.使用

         先创建菜单条,再创建菜单,每一个菜单 中建立菜单项。

   也可以菜单添加到菜单中,作为子菜单。

   通过setMenuBar()方法,将菜单添加到Frame中。

    代码: 

   /*
    打开文件  保存文件
    打开:  FileDialog  注意模式  LOAD  SAVE 
    关键在如何获取选中的文件  getFile方法   
    用流对文本数据进行操作 */
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class MyMenuTest {
	//定义该图形中所需的组件的引用。 
	private Frame f;
     private MenuBar mb;
     private TextArea ta;
     private Menu fileMenu;
     private MenuItem openitem,saveitem,closeitem;
     private FileDialog openDia,saveDia;
     private File file;
	//构造函数
	 MyMenuTest()
	 {
		 init();
	 }
	 
	 public void init()
	 {     //创建窗体
		    f = new Frame("my window");
			f.setBounds(300,100,650,600);
           //定义组件
			mb = new MenuBar();
			ta = new TextArea();
			fileMenu = new Menu("文件");		
			openitem = new MenuItem("打开");
			saveitem = new MenuItem("保存");
			closeitem = new MenuItem("退出");
			//将菜单条添加到窗体中
			f.setMenuBar(mb);
			//将文本区域组件添加到窗体中
			f.add(ta);
			//将菜单项添加到菜单中
			fileMenu.add(openitem);
			fileMenu.add(saveitem);
			fileMenu.add(closeitem);
			//将菜单添加到菜单菜单条中
			mb.add(fileMenu);
			//创建文件对话框组件
			openDia=new FileDialog(f,"我要打开",FileDialog.LOAD);
			saveDia=new FileDialog(f,"我要保存",FileDialog.SAVE);	
			//加载事件
			myEvents();
			f.setVisible(true);
	 }
	 //注册事件
	 public void myEvents()
	 {   //为saveitem添加事件监听
		 saveitem.addActionListener(new ActionListener()
		 {
			 public void actionPerformed(ActionEvent e)
			 {   //显示对话框
				 saveDia.setVisible(true);
				 //获取目录
				 String dirPath=openDia.getDirectory();
				 //获取文件名
				 String fileName=openDia.getFile();
				 if(dirPath==null || fileName==null)
					 return;
				//创建文件对象 
				 file=new File(dirPath,fileName);
				 
				 try{
					 BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
					 String text=ta.getText();
					 bufw.write(text);
					 关闭
					 bufw.close();		
				 }
				    
				 catch(IOException ex)
				 {
					 throw new RuntimeException("文件保存失败");
				 }
			 }
		 });
		 //为openitem添加事件监听
		 openitem.addActionListener(new ActionListener()
		 {
			 public void actionPerformed(ActionEvent e)
			 {
				 openDia.setVisible(true);
				 String dirPath=openDia.getDirectory();
				 String fileName=openDia.getFile();
				 if(dirPath==null || fileName==null)
					 return;
				 ta.setText("");//清空
				 file=new File(dirPath,fileName);
				 
				 try{
					 BufferedReader bufr=new BufferedReader(new FileReader(file));
					 String line=null;
					 while((line=bufr.readLine())!=null)
					 {
						 ta.append(line+"\r\n");
					 }
					 bufr.close();//关闭
				 }
				    
				 catch(IOException ex)
				 {
					 throw new RuntimeException("文件读取失败");
				 }
			 }
		 });
		 //为closeitem添加事件监听
		 closeitem.addActionListener(new ActionListener()
		 {
			 public void actionPerformed(ActionEvent e)
			 {
				 System.exit(0);
			 }
		 });
		 
		 //窗体事件监听
		 f.addWindowListener(new WindowAdapter()
		 {
			 public void windowClosing(WindowEvent e)
			 {
				 System.exit(0);
			 }
		 });
	 }
	 
	public static void main(String[] args) {
		new MyMenuTest();//创建对象,让程序运行
	}

}


 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值