黑马程序员_GUI

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

GUI

GUI

GraphicalUserInterface(图形用户接口)

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

CLI

CommandlineUserInterface (命令行用户接口)

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

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

 

举例:

比如:创建文件夹,或者删除文件夹等

JavaGUI提供的对象都存在java.awtjavax.swing两个包中

 

AwtSwing

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

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

继承关系图

 

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

布局管理器

容器中的组件的排放方式,就是布局。

常见的布局管理器

FlowLayout(流式布局管理器)

从左到右的顺序排列。

Panel默认的布局管理器。

BorderLayout(边界布局管理器)

东,南,西,北,中

Frame默认的布局管理器。

GridLayout(网格布局管理器)

规则的矩阵

CardLayout(卡片布局管理器)

选项卡

GridBagLayout(网格包布局管理器)

非规则的矩阵

 

代码演示:

import java.awt.*;
/*
创建图形化界面
1,创建frame窗体
2,对窗体进行基本设置
	比如:位置 大小 布局
3,定义组件
4,将组件通过窗体的add方法添加到窗体中
5,让窗体显示,通过setVisible(true)
*/

class AwtDemo 
{
	public static void main(String[] args) 
	{
		//创建一个不可见的Frame对象
		Frame f = new Frame();
		
		//设置窗体的大小
		f.setSize(500,400);
		
		//设置窗体的位置
		f.setLocation(100,300);
		
		//设置为流式布局
		f.setLayout(new FlowLayout());

		//创建一个按钮对象
		Button b = new Button("button");
		
		//将按钮加到窗体中
		f.add(b);
		
		//显示隐藏的窗体
		f.setVisible(true);
		
		//
		f.addWindowListener(new WindowAdapter()
		{
			// 关闭窗体
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
			//窗体激活
			public void windowActive(WindowEvent e)
			{
				System.out.println("active");
			}
			//打开窗体
			public void windowOpened(WindowEvent e)
			{
				System.out.println("open");
			}
		});
	}
}


 

事件监听机制组成

事件源(组件)

事件(Event)

监听器(Listener)

事件处理(引发事件后处理方式)

事件监听机制流程图

 

事件监听机制

1  确定事件源(容器或组件)

2  通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

3  该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

4  一般用匿名内部类来表示。

5  在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

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

代码演示:

import java.awt.*;
import java.awt.event.*;
/*
事件监听机制的特点:
1,事件源
2,事件
3,监听器
4,事件处理

事件源:就是awt包或者Swing包中的那些图形化界面
事件: 每一个事件源都有自己特有的对应事件和共性事件
监听器:将可以出发某一事件的动作(不止一个动作)都已经封装到了监听器中

以上三者在java中都已经定义好了
直接获取其对象来用就可以了
我们要做的动作就是对产生的动作进行处理

因为WindowListener的子类WindowAdapter已经实现了WindowListener接口
并覆盖了其中的所有方法,那么只需要继承WindowAdapter覆盖我需要的方法即可
*/

class FrameDemo 
{
	//定义该组件所需组件的引用
	private Frame f;
	private Button but;
	private TextField tf;

	//构造函数初始化
	FrameDemo()
	{
		init();
	}

	//对图形化界面初始化
	public void init()
	{
		//定义窗体对象
		f = new Frame("my frame");
		//对frame进行基本设置
		f.setBounds(300,400,500,400);
		//设置布局方式
		f.setLayout(new FlowLayout());
		
		//创建按钮组件
		but = new Button("my button");
		//创建文本框组件
		tf = new TextField(20);

		//将组件添加到窗体中
		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);
			}
		});
		
		//按钮事件
		//添加一个按钮,让按钮具备退出程序的功能
		/*
		按钮就是事件源
		通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能
		通过查阅Button的描述,发现按钮支持一个特有监听addActionListener
		*/

		//没有适配器的接口 addActionListener
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("action");
				System.exit(0);
			}
		});

		//鼠标事件
		but.addMouseListener(new MouseAdapter()
		{
			//定义计数器
			private int count = 1;
			private int clickCount = 1;
			
			//鼠标进入到组件上时调用
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("enter"+count++);
			}
			//鼠标按键在组件上单击(按下并释放)时调用
			public void mouseClicked(MouseEvent e)
			{
				//双击事件
				if(e.getClickCount()==2)
					System.out.println("click"+clickCount++);
			}
		});

		//给按钮添加一个键盘监听
		but.addKeyListener(new KeyAdapter()
		{
			//按下某个键时调用此方法
			public void keyPressed(KeyEvent e)
			{
				if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
					System.exit(0);
				//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"  "+e.getKeyCode());
			}
		});

		//给文本框添加一个键盘监听
		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("illeagl");
					//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件
					e.consume();
				}
			}
		});
	}

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


 

菜单继承体系

菜单

MenuBar,Menu,MenuItem

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

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

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

代码演示:

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

class MenuDemo 
{
	//定义各个所需的引用
	private MenuBar bar;
	private Menu fileMenu,subMenu;
	private MenuItem openItem,saveItem,closeItem,subItem;
	private Frame f;
	private FileDialog openDialog,saveDialog;
	private TextArea area;
	private File file;

	//构造函数
	MenuDemo()
	{
		init();
	}
	
	//对图形化界面初始化
	public void init()
	{
		//创建窗体对象
		f = new Frame("my window");
		//对frame进行基本设置
		f.setBounds(300,100,700,600);
		//f.setLayout(new FlowLayout());

		//创建文本区域
		area = new TextArea();

		
		//创建菜单栏
		bar = new MenuBar();

		//创建文件打开对话框
		openDialog = new FileDialog(f,"open",FileDialog.LOAD);
		//创建文件保存对话框
		saveDialog = new FileDialog(f,"save",FileDialog.SAVE);

		//创建文件菜单
		fileMenu = new Menu("File");
		//创建子菜单
		subMenu = new Menu("subMenu");
		
		
		subItem = new MenuItem("subItem");	//创建子菜单选项
		openItem = new MenuItem("Open");	//创建打开选项
		saveItem = new MenuItem("Save");	//创建保存选项
		closeItem = new MenuItem("Quit");	//创建关闭选项

		subMenu.add(subItem);	//将子选项加入到子菜单中

		fileMenu.add(openItem);		//将打开选项添加到文件菜单中
		fileMenu.add(saveItem);		//将保存选项添加到文件菜单中
		fileMenu.add(subMenu);		//将子菜单添加到文件菜单中
		fileMenu.add(closeItem);	//将关闭选项添加到文件菜单中	

		bar.add(fileMenu);		//将文件菜单添加到菜单栏中

		f.setMenuBar(bar);		//将此窗体的菜单栏设置为指定的菜单栏
		f.add(area);			//将文本区域添加到窗体中

		myEvent();		//加载事件
	
		f.setVisible(true);	//窗体可见
	}

	public void myEvent()
	{
		saveItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if(file==null)
				{
					saveDialog.setVisible(true);	//弹出对话框

					String dirPath = saveDialog.getDirectory();	//获取此文件对话框的目录
					String fileName = saveDialog.getFile();		//获取此文件对话框的选定文件
					if(dirPath==null || fileName==null)
						return;
					file = new File(dirPath,fileName);
				}
				try
				{
					BufferedWriter bufw = new BufferedWriter(new FileWriter(file));

					String text = area.getText();

					bufw.write(text);
					//bufw.flush();
					bufw.close();
				}
				catch (IOException ex)
				{
					throw new RuntimeException("write failed");
				}

			}
		});

		openItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				openDialog.setVisible(true);	//弹出对话框
				String dirPath = openDialog.getDirectory();	//获取此文件对话框的目录
				String fileName = openDialog.getFile();		//获取此文件对话框的选定文件
				if(dirPath==null || fileName==null)
					return;
				area.setText("");	//清空文本区域
				file = new File(dirPath,fileName);
				try
				{
					BufferedReader bufr = new BufferedReader(new FileReader(file));

					String line = null;

					while((line=bufr.readLine())!=null)
					{
						area.append(line+"\r\n");
					}
					bufr.close();
				}
				catch (IOException ex)
				{
					throw new RuntimeException("read failed");
				}
			}
		});

		//关闭窗体
		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 MenuDemo();
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值