欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

黑马程序员_GUI图形用户界面,黑马程序员_gui图形

来源: javaer 分享于  点击 45614 次 点评:133

黑马程序员_GUI图形用户界面,黑马程序员_gui图形


------------- android培训java培训、java博客、java学习型技术博客、期待与您交流! -------------
计算机两种操作界面
	GUI(图形用户界面)
		Graphical User Interface 图形用户接口
		用图形的方法,来显示计算机操作的界面,更方便更直接
		
	CLI(命令行用户界面)
		Command line User Interface
		常见的Dos命令行操作,需要记忆一些常用的命令,操作不直观

Java中GUI编程
	Java为GUI提供的类都存在java.Awt和javax.Swing两个包中
	Java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法
		实现功能,属重量级控件
	Javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,
		完全由Java实现,增强了移植性,属轻量级控件,且在任何系统下,显示效果都一样!
awt工具包简介
	继承关系图
	Component	组件
		|--Button    按钮
		|--Label     标签
		|--Checkbox    复选框
		|--TextComponent
			|--TextArea    文本区,多行文本框
			|--TextField   文本框
		|--Container:为容器,是一个特殊的组件,可以通过add方法添加其他组件进来	
			|--Panel   面板,不能单独存在
			|--Window  视窗
				|--Frame   框架、边框
				|--Dialog  带标题和边界的顶层窗口,一般不单独存在
					|--FileDialog  文件对话框

	布局管理器
	容器中的组件的排放方式,就是布局
	常见的布局管理器
		FlowLayout 流式布局管理
			从左到右的顺秀排列
			panel默认的布局管理器
		BorderLayout 边界布局管理器
			东南西北中
			Frame默认的布局管理器
		GridLayout网络布局管理器  e.g 计算器界面
			规则的矩阵
		CardLayout 卡片布局管理器
			选项卡
		GridBagLayout 网络包布局管理器
			非规则的矩阵

	图像化界面创建流程
		1、创建Fram窗体
		2、对窗体进行基本设置
			比如大小、位置、布局
		3、定义组件
		4、将组件通过窗体的add方法添加到窗体中
		5、为各组件中事件源添加处理功能
		6、让窗体显示,通过setVisible(ture)
		另:图像化界面是另外一个线程控制的,自动开启多线程,默认布局为BorderLayout

	事件监听机制组成
		1、事件源(组件) 监听对象被触发,产生事件对象。就是awt包或者swing包中的那些图形界面组件
		2、事件(Event) 每一个事件源都有自己特有的对应事件和共性事件,
		3、监听器(Listener) 将可以触发某一个事件的系列动作都已经封装到了监听器中
		4、事件处理(引发事件后处理方式)
		前三项在java中都已经定义好了,直接获取对象来用就可以,需要做的是自定义第四项。

用awt包中类,按照流程进行图形化界面创作演示
import java.awt.*;
import java.awt.event.*;
class  AwtDemo
{
	public static void main(String[] args) 
	{
		//创建窗体,默认边界布局
		Frame f = new Frame("my awt");
		//设置窗体大小,长宽
		f.setSize(500,400);
		//设置窗体显现在屏幕的位置,距离左边,距离上边的长度
		f.setLocation(400,200);

		//设置布局
		f.setLayout(new FlowLayout());
		
		//new一个按钮,将按钮添加到窗体中
		Button b = new Button("按钮");
		f.add(b);
		
		//添加监听器 1、建立WindowAdapter子类对象,2、创建匿名内部类
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				//终止当前正在运行jvm,根据惯例,非0的状态码表示异常终止
				System.exit(0);
			}
			public void windowActivated(WindowEvent e)
			{
				System.out.println("wo huo le");
				//前置窗口,一初始化,该命令执行一次				
			}
			public void windowOpened(WindowEvent e)
			{
				//窗口一打开执行
				System.out.println("wo bei da kai le ");
			}
		});


		//将窗体显示
		f.setVisible(true);

		System.out.println("Hello World!");
	}
}

/*
鼠标事件和键盘事件演示
图形化界面建立模式
*/
import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent 
{
	//定义组件成员
	private Frame f;
	private Button but;
	private TextField tf;
	//将初始化动作定义成方法,在构造函数中调用
	MouseAndKeyEvent()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my demo");

		f.setBounds(300,100,600,500);  
		f.setLayout(new FlowLayout());

		but = new Button("my button");
		tf = new TextField(10);

		f.add(but);
		f.add(tf);

		myEvent();//将事件处理单独抽取成函数,增加代码阅读性

		f.setVisible(true);
	}
	public void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		tf.addKeyListener(new KeyAdapter()
			{
				public void keyPressed(KeyEvent e)
				{
					if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9))
						e.consume();//不按默认方式由产生次事件的源代码进行事件处理
					//即不符合规则的键,不允许输入到文本框
				}
			});

		//添加键盘事件
		but.addKeyListener(new KeyAdapter()
			{
				public void keyPressed(KeyEvent e)
				{
					
					if(e.getKeyCode()==e.VK_ESCAPE)
						System.exit(0);
					//组合键,CTRL+ENTER键
					if(e.isControlDown()&&e.getKeyCode()==e.VK_ENTER)
						System.out.println(e.getKeyChar()+".."+e.getKeyCode());
				}
			});

		//添加鼠标事件
		but.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					System.out.println("action ok");	
				}
			});
			//鼠标动作会先于addaction动作执行
		but.addMouseListener(new MouseAdapter(){
			private int count=1,clickCount =1;
			//鼠标进入按钮区域事件
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("shubiaojinru"+count++);
			}
			//鼠标点击事件
			public void mouseClicked(MouseEvent e)
			{
				//获取点击次数,找方法去该事件中找,双击
				if(e.getClickCount()==2)
					System.out.println("dianjidongzuo"+clickCount++);
			}
		
		});
		
	}
	public static void main(String[] args) 
	{
		new MouseAndKeyEvent();
	}
}

/*
需求图形化界面文本区域列出指定目录内	
	先画界面,然后再把事件加上就ok
	事件就是输入一个目录,点击按钮,列出到文本区域
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class  MyWindowDemo
{
	private Frame f;
	private TextField tf;
	private Button but;
	private TextArea ta;
	MyWindowDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my window");
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());

		tf = new TextField(60);
		but = new Button("转到");
		ta = new TextArea(25,70);

		f.add(tf);
		f.add(but);
		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();	
				}
			});
		but.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					showDir();
				}
			});
		f.addWindowListener(new WindowAdapter()
			{
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}
			});
	}
	//将显现目录封装成函数,在事件中调用
	private void showDir()
	{	
		// 文本框添加路径名称
		String dirPath = tf.getText();
		File dir = new File(dirPath);

		if(dir.exists() && dir.isDirectory())
		{
			//获取数据前清空文本区域,
			ta.setText("");//往文本区域添加数据并覆盖已有数据
			String[] names = dir.list(); 
			for(String name : names)
			{
				ta.append(name+"\r\n");//将数据添加到已有数据末尾且不覆盖
			}
		}
		else
		{
			//如果输入的路径是错误的,会弹出对话框
			Dialog d = new Dialog(f,"Info-self",true);
			d.setBounds(400,200,240,180);
			d.setLayout(new FlowLayout());
			Button b = new Button("确定");
			Label l = new Label("您输入的路径:"+dirPath+"有误");
			d.add(l);
			d.add(b);
			//弹出错误对话框后,提供将对话框隐藏方法
			d.addWindowListener(new WindowAdapter()
				{
					public void windowClosing(WindowEvent e)
					{
						d.setVisible(false);
					}
				});	
			b.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
						d.setVisible(false);
					}
				});

			d.setVisible(true);
		}
	}
	public static void main(String[] args) 
	{
		new MyWindowDemo();
	}
}
/*
创建菜单、菜单栏、菜单项演示
在菜单项中添加打开文件、保存文件功能
*/
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest 
{
	private Frame f;
	private MenuBar bar;		//菜单条
	private Menu  fileMenu;		//菜单
	private MenuItem  closeItem,openItem,saveItem;	//菜单项
	private FileDialog openDia,saveDia;
	private TextArea ta;
	private File file;

	MyMenuTest()
	{
		init();
	}
	public void init()
	{

		f = new Frame("my window");
		f.setBounds(400,100,600,500);
		
		ta = new TextArea();
		bar = new MenuBar();
		fileMenu = new Menu("文件");
	
		closeItem = new MenuItem("退出");
		openItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		
		openDia = new FileDialog(f,"打开",FileDialog.LOAD);//文本对话框,打开模式
		saveDia = new FileDialog(f,"保存",FileDialog.SAVE);//... 保存模式

		fileMenu.add(openItem);  //菜单里面添加菜单项,一般菜单项是最终项
		fileMenu.add(saveItem);
		fileMenu.add(closeItem);
		bar.add(fileMenu);		//菜单条里面添加菜单
		f.setMenuBar(bar);		//窗体里面设置菜单条
		f.add(ta);

		
		myEvent();
		
		f.setVisible(true);

	}
	public void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		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("");	//重新打开时候,清空ta
				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 i)
				{
					throw new RuntimeException("打开失败");
				}
			}
		});
		//添加保存事件
		saveItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//如果文件存在则直接写入数据,如果不存在先创建文件,在写入
				if(file==null)
				{
					saveDia.setVisible(true);
					String dirPath = saveDia.getDirectory();
					String fileName = saveDia.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 ii)
				{
					throw new RuntimeException();
				}

			}
		});
	}
	public static void main(String[] args) 
	{
		 new MyMenuTest();
	}
}


------------- android培训java培训、java博客、java学习型技术博客、期待与您交流! -------------
详情请查看:http://edu.csdn.net/heima/




相关文章

    暂无相关文章
相关栏目:

用户点评