黑马程序员_【总结】_GUI知识梳理_(end)

GUI知识梳理


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

---------------------------------------------------------------------------------------------------------------------------------------------
1、创建图形化界面基本步奏
1、创建 frame
2、对frame 进行基本的设计,大小,初始位置 ,布局
3、定义组件,按钮,文本框,文本区域等
4、窗体add 组件
5、显示窗体
2、时间监听机制
1、事件源 --awt、swing包里的图形界面组合。
2、事件--各组件特有事件,包括鼠标、键盘动作的共性事件
3、监听器 -- 可以将触发某一事件的一个或多个动作封装到监听器中
4、事件处理--程序主要做的事情

3、Adapter  适配器。为了创建对象
很多事件监听器都有适配器
Actionlistener 没有适配器。
4、事件方法名规律  
1、add后面跟的是组件名,结尾是Listener
 2、 new 的是组件名开头
3、方法名 也是组件名开头 ,
4、最后事件也是组件名开头。
5、最关键的就是,谁的事件,对应事件处理怎么写
-------------
【1】
java.Awt: 抽象窗口工具包(跨平台性稍差)
javax.Swing: 在AWT的基础上,建立的一套图形界面系统(彻底跨平台。)
--------------------------
创建图形化界面:
1、创建 Frame 窗体
2、对窗体进行基本设置
比如大小,位置,布局。
3、定义组件
4、将组件通过窗体的add 方法添加的窗体中
5、 让窗体显示、通过 vsetVisible(true)
--------------------------
事件监听机制的特点:
1、事件源
2、事件
3、监听器
4、事件处理


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


事件 :每一个事件源都有自己特有的对应时间和共性事件


监听器 :将可以触发某一个事件的动作(不止一个动作),都已经封装到了监听器中。


以上三者,在Java中都已经定义好了,
直接获取其对象来用就可以了


我们要做的事情是,就是对残生的动作进行处理。
class $1AwtDemo 
{
	public static void main(String[] args) 
	{
		Frame f = new Frame("my awt");
		//f.setSize(380,297);//设置高宽
		//f.setLocation(491,236);//设置坐标
		f.setBounds(491,236,380,297);//包含上面2个方法的  前面是坐标,后面是高宽
		f.setLayout(new FlowLayout());//设定按钮布局样式
		Button b = new Button("按我呀按我呀");//声明按钮
		f.add(b);//加入该按钮
		//f.addWindowListener(new MyWin());//添加事件 【a】
		//用匿名内部类实现:
		 // 事件  
		//发现规律  1、add后面跟的是组件名,结尾是Listener 2、 new 的是组件名开头
		//3、方法名 也是组件名开头 ,4、最后事件也是组件名开头。
		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("我被打开了。");//只在打开时候执行
			}
		});
		f.setVisible(true);//显示窗口
	}
}
【2】
class Mywin implements WindowListener
{
// 覆盖7个方法,可是我们只用到了关闭的动作
// 其他的动作都没有用到,可是却必须复写。
}
/ /因为 WindowListener  的子类 WindowAadapter已经实现了 WindowListener  接口
//并覆盖了其中所有的方法,那么我们只要覆盖继承自 windowAdapter 覆盖需要的方法即可
class MyWin extends WindowAdapter  //对应 【a】  使用内部类更优。
{
	public void windowClosing(WindowEvent e){
		System.exit(6000);
		//System.out.println("sss"+e.toString());
	}
}
//发现规律  1、add后面跟的是组件名,结尾是Listener 2、 new 的是组件名开头
//3、方法名 也是组件名开头 ,4、最后事件也是组件名开头。
【3】
public void myevent(){
		//让按钮具备退出程序功能
		//那么该选择那个监听器呢,上面那个addWindowListener 是窗口监听,明显不阔仪的
		//通过关闭窗口示例了解到,想要知道那个组件具备什么样的 特有监听器
		//需要查看该组件 对象的功能
		//发现:查阅 Buttion 发现按钮支持一个特有的监听 addActionListener			
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvente)
			{
				System.exit(0);
			}
		});
}
public void myevent(){
		//点击鼠标事件,和点击按钮关闭,谁会先执行呢?试试
		//证明:鼠标事件优先于按钮事件
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e){
				System.out.println("按钮 关闭事件");
			}
		});
		//2鼠标事件
		b.addMouseListener(new MouseAdapter()
		{
			public void mouseEntered(MouseEvent e){
				System.out.println("鼠标进入组件次数:"+in++);
			}
			public voidmouseExited(MouseEvent e){
				//System.out.println(out++);
			}
			public void mouseClickedMouseEvent e){
				if(e.getClickCount()==2)
					System.out.println("鼠标点击松开事件111111111111");
			}
			public void mousePressed(MouseEvent e){
				//System.out.println("222222");
			}
			public void mouseReleased(MouseEvent e){			
				//sop("111111");
			}
		});
		//3键盘监听-事件
		b.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				sop(KeyEvent.getKeyText(e.getKeyCode())+">>>"+e.getKeyCode());
				if(e.getKeyCode()==KeyEvent.VK_ESCAPE){//ESC 退出。
						//System.exit(0);//演示时, 打印看效果
						sop("Esc。。。");
				}
				if(e.isControlDown()&& e.getKeyCode()==KeyEvent.VK_ENTER){
					sop("CTRL+ENTER........");
				}
			}
		});
		//4、输入框世间
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e){
				int code = e.getKeyCode();
				if(!(code>=KeyEvent.VK_0&&	code<=KeyEvent.VK_9)){
					sop("非法字符:"+e.getKeyChar());
					e.consume();//该方法可以屏蔽非法字符的录入。
				}
			}
		});



	}
【4】
[模拟一个电脑盘符查看文件的界面以及功能]
通常把初始化定义属性在一个类中
把事件定义在一个方法中。
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
class $4MyWindowDemo 
{
	public static void main(String[] args) 
	{
		new myWindow();
	}
}
class myWindow
{
	private Frame f ;
	private Button b ;
	private TextField tf;
	private TextArea ta;
	//
	private Dialog dia;
	private Label lab;
	private Button okbut;

	myWindow(){
		init();
	}
	public void init(){
		f = new Frame("查询功能");
		
		f.setBounds(400,200,550,400);
		f.setLayout(new FlowLayout());

		b = new Button("转 到");
		tf = new TextField(60);
		ta = new TextArea(20,70);
		//
		dia = new Dialog(f,"系统提示!",true);
		dia.setBounds(500,300,250,100);
		dia.setLayout(new FlowLayout());
		lab = new Label();
		okbut = new Button("确定");
		dia.add(lab);
		dia.add(okbut);
		//
		f.add(tf);
		f.add(b);
		f.add(ta);

		myevent();

		f.setVisible(true);
	}
	public void myevent(){
		//输入框-监听--回车达到按钮事件
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e){
				if(e.getKeyCode()== KeyEvent.VK_ENTER){
					showDir();
				}
			}
		});

		//错误提示框-监听--隐藏
		dia.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e){
				dia.setVisible(false);
			}
		});

		//错误提示框 按钮-监听--隐藏
		okbut.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e){
				dia.setVisible(false);
			}
		});
		//错误提示框 按钮-监听--隐藏 2
		okbut.addKeyListener(new KeyAdapter()
		{
			//没写完
			public void keyPressed(KeyEvent e){
				dia.setVisible(false);
			}
		});
		//窗口监听---关闭事件
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});

		//按钮监听 //事件
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e){
				showDir();
			}
		});

	}
	// 封装该功能实在复用--查找功能
	private void showDir(){
		String dirPath = tf.getText();
		File dir = new File(dirPath);

		if(dir.exists() && dir.isDirectory()){
			String [] names = dir.list();
			for(String name : names ){
				ta.append(name+"\r\n");
			}
		}else{
			String info = "你输入的路径:"+dirPath+"  是错误的!";
			lab.setText(info);
			dia.setVisible(true);
			}
	}//
	public void sop(Object obj){
		System.out.println(obj);
	}
}
【5】
【模拟记事本】
通过上诉学习,自己模拟了一下下记事本。。没有写完。
package com.awt;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.*;
import java.util.*;

public class myJishiben {	
	private Frame f;
	
	private MenuBarbar;//工具兰
	private Menu fileMenu,editorMenu,formatMenu,seekMenu,helpMenu;//文件	编辑	格式	查看	帮助	
	
	private MenuItem newMi,openMi,saveMi,lsaveMi,yemMi,printMi,closMi;//文件:	:新键	打开	保存	另存为	页面设置--打印	退出
	private MenuItem rutrunMi,jianqMi,copyMi,toCopyMi,deleteMi,seleteMi,seleNextMi,tiHuanMi,tiHNextMi,zDaoMi,allMi,timeMi;	
		//编辑::	撤销	复制	粘贴	删除	查找	查找下一个	替换	转到	全选	时间/日期
	private MenuItem huanghMi,zitiMi; //	格式::	自动换行	字体
	private MenuItem seekMi; //	查看::	状态栏
	private MenuItem seeHelpMi,aboutJSBmi; //	帮助	::	查看帮助文档		关于记事本
	
	private TextArea txta;
	
	private FileDialog openDa,saveDa,lsaveDi,yemianDa,printDa;//文件对话框:	: 
	private File file;
	myJishiben(){
		init();
	}
	//初始化--主窗口
	public void init(){
		f = new Frame("My记事本");
		f.setBounds(180,120,700,540);
		
		txta = new TextArea();
		f.add(txta);
		//加入--菜单
		init_bar();
		f.setMenuBar(bar);	
				
		openDa =new FileDialog(f,"打开",FileDialog.LOAD);
		saveDa =new FileDialog(f,"保存",FileDialog.SAVE);
		myevent();
		
		f.setVisible(true);
	}
	// --- 【【【--事--件---】】】---监听--
	public void myevent(){
		timeMi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				Date date = new Date();
				SimpleDateFormat f = new SimpleDateFormat("yyyy年MM月dd HH:mm:ss");
				String time = f.format(date);
				String text = time+"\r\n"+txta.getText();
				txta.setText("");
				txta.append(text);
			}
		});
		 // --监听--主菜单--打开 - 按钮    ---打开电脑中文件
		 // 需要使用到Dialog 对话框
		 // 1、接收路径--文件名	2、判断是否 为空		3、封装为对象	
		 // 4、try,读取目标文件内容----循环写入到    txta 当中
		 // 注意,读取前清空     txta
		openMi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				openDa.setVisible(true);
				String dirPath = openDa.getDirectory();
				String fileName = openDa.getFile();
				if(fileName == null || dirPath == null)
					return;
				txta.setText("");
				file = new File(dirPath+fileName);
				
				try{
					BufferedReader bufr = new BufferedReader(new FileReader(file));
					String line = null;
					while((line = bufr.readLine()) != null){
						txta.append(line+File.separator);//跨平台换行方法						
					}
					bufr.close();
				}
				catch(IOException ioe){
					throw new RuntimeException(" da kai shi bai ");
				}
			}
		});
		// --监听--主菜单--保存- 按钮    ---保存记事本内容到电脑
		 // 需要使用到Dialog 对话框
		 // 1、同样获取路径--文件名		2、同样判断是否为口	3、判断是否已有该文件
		saveMi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				showDir();
			}
		});
			

		 // --监听--主菜单--另存为 - 按钮    ---已有文件再次存放
		 //  只需要再次调用 --写好的---保存--代码即可
		lsaveMi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				showDir();
			}
		});
		
		// --监听--打印页面--模拟出弹框
		 // 没有找到弹出该功能界面的 关键字段
		yemMi.addActionListener(new ActionListener(){
			private Frame yemF;
			private TextArea yemtxt;
			private Button okbut;
			
			public void actionPerformed(ActionEvent e){
				init_yemMI();
			}
			public void init_yemMI(){
				yemF = new Frame("模拟页面设置");
				yemF.setBounds(350,300,450,200);
				yemF.setLayout(new FlowLayout());
				
				yemtxt = new TextArea(7,60);
				okbut = new Button("确定");				
				String text="刚刚在地铁上,一个妹纸突然大叫:“盯住我胸看什么看啊,流氓!”\r\n\r\n"+
					"然后所有的人望过来,一男子满头大汗,一脸尴尬,被他朋友拉开。\r\n\r\n"+
					"只听他朋友说:“你盯她做什么啊?又不漂亮,又不丰满!”\r\n\r\n"+
					"那男的委屈的说,很少见到穿那么低胸都没有一丁点沟的,我想在仔细找找\r\n\r\n";
				
				yemtxt.setText(text);;
				yemF.add(yemtxt);
				yemF.add(okbut);
				
				printEvent();
				yemF.setVisible(true);
			}
			public void printEvent(){
				yemF.addWindowListener(new WindowAdapter(){
					public void windowClosing(WindowEvent e){
						yemF.setVisible(false);
					}
				});
				okbut.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent e){
						yemF.setVisible(false);
					}
				});
			}
			
			
		});
		
		// --监听--打印
		printMi.addActionListener(new ActionListener(){
			private Frame prinF;
			private TextArea printxt;
			private Button okbut;
			
			public void actionPerformed(ActionEvent e){
				init_yemMI();
			}
			public void init_yemMI(){
				prinF = new Frame("模拟打印页面");
				prinF.setBounds(350,300,450,200);
				prinF.setLayout(new FlowLayout());
				
				printxt = new TextArea(7,60);
				okbut = new Button("确定");				
				String text="有一女盆友,忒二。 \r\n\r\n"+
							"那天她上我扣扣,非要说我给她的备注太难听,要求我改了! \r\n\r\n"+
							"我想了想,写上“二货媳妇”。 \r\n\r\n"+
							"她看了看,严肃的问我:“你是不是还有个“一货媳妇”?”";
	
				printxt.setText(text);;
				prinF.add(printxt);
				prinF.add(okbut);
				
				printEvent();
				prinF.setVisible(true);
			}
			public void printEvent(){
				prinF.addWindowListener(new WindowAdapter(){
					public void windowClosing(WindowEvent e){
						prinF.setVisible(false);
					}
				});
				okbut.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent e){
						prinF.setVisible(false);
					}
				});
			}
		});

		// --监听--主窗体--X- 按钮    ---关闭事件
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});

		// 	--监听--主菜单--退出 - 按钮    ---关闭事件

		closMi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
		// --监听--主菜单--新建 - 按钮    ---新建记事本事件
		// 新建功能有待优化,
		// 譬如名字++	:新建,新建(1)。。。
		newMi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){			
				new myJishiben();	
				f.setVisible(false);
			}
		});

	}

	 // 【提取的公共方法,方便复用】
	// --监听--主菜单--保存- 按钮    --
	 // 需要使用到Dialog 对话框
	 // 0、判断是否有该文件		没有:1、同样获取路径--文件名		2、同样判断是否为空	3、封装为对象
	 // 					     有:跳过123
	 // 4、创建一个写入流,获取	 txta	字符并转为字符串,  写入,
	private void showDir(){
		
		if(file == null){
			saveDa.setVisible(true);
			String dirPath =saveDa.getDirectory();
			String fileName = saveDa.getFile();
			if(dirPath == null || fileName == null)
				return;
			file = new File(dirPath,fileName);
		}
		try{
			BufferedWriter bufw = new BufferedWriter(new FileWriter(file));//IO
			String text = txta.getText();
			bufw.write(text);
			bufw.flush();
			
			bufw.close();
		}
		catch(IOException ioex){
			throw new RuntimeException("bao cun shi bai ");
		}
		
	}
	
	 // 初始化 -----主菜单
	 // 1、主菜单-横-样式不会修改
	 // 2、纵菜单- 有个栏 不知道叫什么,其中格式可以打勾那个,  不会做
	 // 3、缺乏快捷键设定
	private void init_bar(){
		bar = new MenuBar();
		//加入--文件---纵菜
		init_fileMenu();
		bar.add(fileMenu);
		//加入--编辑---纵菜
		init_editorMenu();
		bar.add(editorMenu);
		//加入--格式---纵菜
		init_formatMenu();
		bar.add(formatMenu);
		//加入--查看---纵菜
		init_seekMenu();
		bar.add(seekMenu);
		//加入--帮助---纵菜
		init_helpMenu();
		bar.add(helpMenu);
	}

	 // 初始化 --fileMenu-文件--纵菜单
	private void init_fileMenu(){
		fileMenu = new Menu("文件");
		
		newMi = new MenuItem("新键");
		openMi = new MenuItem("打开");
		saveMi = new MenuItem("保存");		
		lsaveMi = new MenuItem("另存为");
		yemMi = new MenuItem("页面设置");
		printMi = new MenuItem("打印");
		closMi = new MenuItem("退出");
		
		fileMenu.add(newMi); 
		fileMenu.add(openMi); 
		fileMenu.add(saveMi);
		fileMenu.add(lsaveMi); 
		fileMenu.addSeparator();
		fileMenu.add(yemMi); 
		fileMenu.add(printMi); 
		fileMenu.addSeparator();
		fileMenu.add(closMi); 				
	}

	 // 初始化 --editorMenu-编辑--纵菜单

	private void init_editorMenu(){
		editorMenu = new Menu("编辑");
		
		rutrunMi = new MenuItem("撤销");
		jianqMi =new MenuItem("剪切");
		copyMi = new MenuItem("复制");
		toCopyMi = new MenuItem("粘贴");
		deleteMi = new MenuItem("删除");
		seleteMi = new MenuItem("查找");
		seleNextMi = new MenuItem("查找下一个");
		tiHuanMi = new MenuItem("替换");
		zDaoMi = new MenuItem("转到");
		allMi = new MenuItem("全选");
		timeMi = new MenuItem("时间/日期");
		
		editorMenu.add(rutrunMi);
		editorMenu.addSeparator();
		editorMenu.add(jianqMi);
		editorMenu.add(copyMi);
		editorMenu.add(toCopyMi);
		editorMenu.add(deleteMi);
		editorMenu.addSeparator();
		editorMenu.add(seleteMi);
		editorMenu.add(seleNextMi);
		editorMenu.add(tiHuanMi);
		editorMenu.add(zDaoMi);
		editorMenu.addSeparator();
		editorMenu.add(allMi);
		editorMenu.add(timeMi);		
	}

	 //初始化 --formatMenu-格式--纵菜单

	private void init_formatMenu(){
		formatMenu = new Menu("格式");
		
		huanghMi = new MenuItem("自动换行");
		zitiMi = new MenuItem("字体");
		
		formatMenu.add(huanghMi);
		formatMenu.add(zitiMi);
	}

	 // 初始化 --seekMenu-查看--纵菜单
	private void init_seekMenu(){
		seekMenu =new Menu("查看");
		
		seekMi = new MenuItem("状态栏");
		seekMenu.add(seekMi);
	}

	 // 初始化 --helpMenu-查看--纵菜单

	private void init_helpMenu(){
		helpMenu =new Menu("查看");
		
		seeHelpMi = new MenuItem("查看帮助文档");
		aboutJSBmi = new MenuItem("关于记事本");
		
		helpMenu.add(seeHelpMi);
		helpMenu.addSeparator();
		helpMenu.add(aboutJSBmi);
	}
}
看的出来, awt 还是非常的麻烦,期待Swing啊








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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值