黑马程序员—Java的GUI

12. GUI

 

 

12.1 GUI概述

 

GraphicalUser Interface 图形用户接口,Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

 

java.Awt :Abstracet Window ToolKit,需要调用本地系统方法实现功能,属重量级控件

 

javax.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且

完全由Java实现,增强了移植性,属轻量级控件

 

 

12.2 布局管理器

 

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

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

                             本行首个添加是居中存放,再次添加会自动左移再添加

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

                              不指定方位添加时会占据整个布局,再添加时会覆盖

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

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

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

 

在一个Frame中要设置多种布局,需要先设置panel,一个panel设置一种布局。

 

 

12.3    Frame

 

新建Frame对象最初是不可见的,通过setVisible()方法来实现显示或隐藏。

 

创建图形化界面:

1) 创建frame窗体

2) 对窗体进行基本设置

比如:大小、位置、布局

3) 定义组件

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

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

 

 

12.4 事件监听机制

 

 

事件监听机制的特点:

1)事件源(组件) : 就是awt包或者swing包中的那些图形界面组件

2)事件(Event)   : 每一个事件源都有自己特有的对应事件和共性事件

3)监听器(Listener) : 将可以触发某一个事件的动作(多个)都已经封装到了监听器中

4)事件处理(引发事件后处理方式) :定义触发事件后的处理行为


GUI简单示例:

import java.awt.*;
import java.awt.event.*;
class FrameDemo 
{
	//定义该图形中所需的组件的引用
	private Frame f;
	private Button but;
	FrameDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my frame");
		//对frame进行基本设置
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		but = new Button("my button");
		//将组件添加到frame中
		f.add(but);
		//加载一下窗体上的事件
		myEvent();
		//显示窗体
		f.setVisible(true);
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
	public static void main(String[] args) 
	{
		new FrameDemo();
	}
}

12.5 鼠标、键盘事件

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 frame");
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());
		//建立长度为20的文本框
		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.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				int code = e.getKeyCode();
				//使得文本框中只能输入数字
				if (code < KeyEvent.VK_0 | (KeyEvent.VK_9 < code & code <KeyEvent.VK_NUMPAD0) | code > KeyEvent.VK_NUMPAD9)
				{
					System.out.println(code+"....是非法的");
					//此方法可以使对于事件的处理失效
					e.consume();
				}
			}
		});
		/*
		//给按钮添加键盘监听器,按下相关按键做出动作
		but.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				//组合键的使用
				if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_F4)
					System.exit(0);
				//获取所按按键所代表的符合,以及按键的编码
				System.out.println(e.getKeyChar()+"..."+e.getKeyCode());
			}
		});	
		//给按钮添加活动监听器,按下按钮做出相应处理
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("action ok");
			}
		});
		//给按钮添加鼠标监听器,鼠标发生动作做出相应处理
		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)
			{	
				//调用MouseEvent中的方法可以获取到点击动作的次数
				//如果双击鼠标左键就执行输出指令。
				if(e.getClickCount()==2)
					System.out.println("双击击动作"+clickCount++);
			}
		});
		*/
	}
}

利用代码自制简易记事本:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuDemo 
{
	private Frame f;
	private MenuBar bar;
	private Menu fileMenu;
	private MenuItem openItem,saveItem,closeItem;
	private TextArea ta;
	private File file;
	MyMenuDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my frame");
		f.setBounds(300,100,700,600);
		bar = new MenuBar();
		fileMenu = new Menu("文件");
		openItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		closeItem = new MenuItem("退出");
		ta = new TextArea();
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(closeItem);	
		bar.add(fileMenu);
		f.setMenuBar(bar);
		f.add(ta);
		myEvent();
		f.setVisible(true);
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//给条目增加打开文件的功能,显示在文本域中
		openItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//打开文件对话框
				FileDialog openDia = new FileDialog(f,"打开",FileDialog.LOAD);
				openDia.setVisible(true);
				//点”打开“按钮获取在文件对话框中选中文件的路径和文件名
				String dirPath = openDia.getDirectory();
				String fileName = openDia.getFile();
				//当点取消的时候返回,避免创建file对象时出现空指针异常
				if(dirPath==null || fileName==null)
					return;
				ta.setText("");
				file = new File(dirPath,fileName);
				BufferedReader bufr = null;
				try
				{
					bufr = new BufferedReader(new FileReader (file));
					String line = null;
					while ((line=bufr.readLine())!=null)
					{
						ta.append(line+"\r\n");
					}
				}
				catch (IOException ioe)
				{
					throw new RuntimeException("读取失败");
				}
				finally
				{
					try
					{
						if(bufr!=null)
							bufr.close();
					}
					catch (IOException ioe)
					{
						throw new RuntimeException("读取关闭失败");
					}	
				}
			}
		});
		saveItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//如果文件不存在,就弹出文件对话框来选择保存目的地
				if(file==null)
				{
					FileDialog saveDia = new FileDialog(f,"保存",FileDialog.SAVE);
					saveDia.setVisible(true);
					//点”保存“按钮时,获取选中的文件路径和名称
					String dirPath = saveDia.getDirectory();
					String fileName = saveDia.getFile();
					if(dirPath==null || fileName==null)
						return;
					file = new File(dirPath,fileName);
				}
				BufferedWriter bufw = null;
				try
				{
					bufw = new BufferedWriter(new FileWriter(file));
					String text = ta.getText();
					bufw.write(text);
				}
				catch (IOException ioe)
				{
					throw new RuntimeException("保存失败");
				}
				finally
				{
					try
					{
						if(bufw!=null)
							bufw.close();
					}
					catch (IOException ioe)
					{
						throw new RuntimeException("保存关闭失败");
					}	
				}
			}
		});
		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
	}
	public static void main(String[] args) 
	{
		new MyMenuDemo();
	}
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值