`

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

阅读更多

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------



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

CLI
Command User Interface(命令行用户接口)
就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。

举例:创建删除文件夹等

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

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

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

另外还有IBM的Swt包

继承关系图



布局管理器
容器中的组件的排列方式,就是布局。

常见布局管理器:
FlowLayout(流式布局管理器)从左到右排列,Panel默认时的布局管理器。
BorderLayout(边界布局管理器)东南西北中,Frame默认的布局管理器。
GridLayout(网格布局管理器)规则的矩阵
CardLayout(卡遍布局管理器)选项卡
GridBagLayout(网个包布局管理器)非规则的矩阵,一个组件可能占用多个网格。

一个Fram中组件如果有多重布局,使用不同布局的面板Panel来填充Frame。

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

import java.awt.*;
import java.awt.event.*;
/**
使用流布局管理器。
*/
class MyFrame
{
	//定义组件
	Frame frame;
	Label l1,l2,l3;
	TextField tf1,tf2,tf3,tf4;
	Button but;
	//构造函数初始化窗体
	MyFrame()
	{
		init();
	}
	public void init()
	{
		//设置窗体及组件
		frame=new Frame("我的绩点");
		frame.setBounds(300,100,270,300);
		frame.setLayout(new FlowLayout());

		l1=new Label("语文");				
		l2=new Label("数学");
		l3=new Label("英语");
		but=new Button("绩点");
		tf1=new TextField(25);
		tf2=new TextField(25);
		tf3=new TextField(25);
		tf4=new TextField(25);
		//添加组件
		frame.add(l1);
		frame.add(tf1);
		frame.add(l2);
		frame.add(tf2);
		frame.add(l3);
		frame.add(tf3);
		frame.add(but);
		frame.add(tf4);

		// 让窗体显示
		frame.setVisible(true);
	}

}
/*
测试窗体
*/
public class FrameTest
{

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






事件监听机制
当注册了监听器的事件源触发了监听器所监听的时间后,就会把事件对象传递给监听器进行处理。

事件监听机制的特点
1.事件源
2.事件
3.监听器
4.事件处理

事件源:awt包或者swing包中的那些图形界面组件。

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

监听器:将可以触发的事件封装的对象。

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

常见监听器
窗体监听器WindowListener
按钮监听器ActionListener

常见事件对象
窗体事件WindowEvent
按钮事件ActionEvent

窗体事件
窗体事件监听首先要注册监听器,
窗体Window的addWindowListener(WindowListener l)方法可以给指定窗口注册监听器。
需要WindowListener类型的参数,WindowListener是一个接口,
实现WindowListener接口需要实现它的七个抽象方法。
而实际上我们经常只需要用到其中的某一个或某几个方法,
这就需要使用WindowListener抽象子类WindowAdapter窗体适配器,
它实现了WindowListener所有方法,方法体为空。
我们只要创建匿名内部类覆盖某一个我们需要使用的方法实现自己特有处理方式。

关闭窗体

addWindowListener(new WindowAdapter()
{
	public void WindowClosing()
	{
		System.exit(0);
	}	
});



Action事件
对一个按钮事件进行监听

b =new Button();
//添加一个具备程序推出功能的按钮
b.addActionListener(new ActionListener()
{
	public void actionPerformed(ActionEvent e)
	{
		System.exit(0);
	}
});



共性事件

鼠标事件和键盘事件
鼠标事件和键盘事件都是共性事件,所有组件都支持的事件。

鼠标事件
MouseListener 鼠标监听器
MouseAdapter  鼠标监听适配器
MouseEvent    鼠标事件

判断鼠标双击

addMouseListener(new MouseAdapter()
{
	public void mouseCliked(MouseEvent e)
	{
		if(e.getClikCount()==2)
			System.out.println("鼠标双击");
	}
});



键盘事件
KeyListener 键盘监听器
KeyAdapter  键盘监听适配器
KeyEvent    键盘事件

addkeyListener(new KeyAdapter()
{
	public void keyPressed(KeyEvent e)
	{
		if(e.getKeyCode()==KeyEvent.VK_ESCAPe)
			System.exit(0);
		//如果判断两个键是否同时按下
		if(e.isControlDown()&&e.getKeCode()==KeyEvent.VK_ESCAPE)
			System.out.println("ctrl+enter isrun");
		System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());
	}
});



文本框添加键盘事件

TextField tf=new TextField(20);
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("非法");
			e.cosume();//屏蔽默认处理方式,如果不是数字不会添加到文本框中。
		}


	}
});



代码示例类似记事本功能的软件,实现GUI界面以及打开保存功能。

/**
@author 何竹冬
@version 1.0
@date 2012/12/24
需求:类似记事本功能的软件,实现GUI界面以及打开保存功能。
*/
package cn.itheima.javabase;
import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class MyText
{
	//定义组件信息
	private Frame frame;
	private MenuBar menuBar;
	private Menu fileMenu;
	private MenuItem openItem,saveItem,closeItem;
	private TextArea textArea;
	private FileDialog openDialog,saveDialog;
	private File file;

	MyText()
	{
		init();
	}
	/**
	初始化界面
	*/
	public void init()
	{
		frame=new Frame("我的记事本");
		frame.setBounds(300,100,500,600);

		menuBar=new MenuBar();
		
		fileMenu=new Menu("文件");
		openItem=new MenuItem("打开");
		saveItem=new MenuItem("保存");
		closeItem=new MenuItem("退出");

		textArea=new TextArea();
		saveDialog=new FileDialog(frame,"save",FileDialog.SAVE);
		openDialog=new FileDialog(frame,"open");
		menuBar.add(fileMenu);
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(closeItem);

		frame.setMenuBar(menuBar);
		frame.add(textArea);

		myEvent();
		frame.setVisible(true);
	}
	/**
	窗体及组件事件 
	*/
	private void myEvent()
	{
		//窗体事件监听
		frame.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)
			{
				openDialog.setVisible(true);
				String dir=openDialog.getDirectory();
				String name=openDialog.getFile();
				if(dir==null||name==null)
					return;
				textArea.setText("");
				file=new File(dir,name);
				read2File(file);
			}
		});
		//保存条目事件监听
		saveItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if(file==null)
				{
					System.out.println("file is null");
					saveDialog.setVisible(true);
					String dir=saveDialog.getDirectory();
					String name=saveDialog.getFile();
					if(dir==null||name==null)
						return;
					System.out.println("save");
					file=new File(dir,name);	
				}
				write2File(file);
			}
		});
	}
	/**
	读取文件数据
	*/
	private void read2File(File file)
	{
		BufferedReader br=null;
		try
		{
			br=new BufferedReader(new FileReader(file));
			String line=null;
			while((line=br.readLine())!=null)
			{
				textArea.append(line+"\r\n");
			}
		}
		catch (IOException ex)
		{
			throw new RuntimeException("读取失败");
		}
		finally
		{
			try
			{
				if(br!=null)
				br.close();
			}
			catch (IOException ex)
			{
					throw new RuntimeException();
			}
					
		}
	}
	/**
	保存文件(写入文件数据)
	*/
	private void write2File(File file)
	{
		BufferedWriter bw=null;
		try
		{
			bw=new BufferedWriter(new FileWriter(file));
			String text=textArea.getText();
			System.out.println(text);
			bw.write(text);
		}
		catch (IOException ex)
		{
			throw new RuntimeException("写入失败");
		}
		finally
		{
			try
			{
				if(bw!=null)
				bw.close();
			}
			catch (IOException ex)
			{
					throw new RuntimeException();
			}
					
		}


	}
	/**
	主函数:创建一个窗体
	*/
	public static void main(String[] args)
	{
		new MyText();
	}
}





----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

  • 大小: 69.6 KB
  • 大小: 5.4 KB
  • 大小: 5.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics