java基础—9.GUI图形化界面

一、概述及理解

java的GUI都在java.Awt和java.Swing中,其中Awt(Abstract Window ToolKit)调用系统本地系统方法实现功能,是重量级控件。Swing是在Awt的基础上,提供了更多的组件,并且完成由Java实现,是轻量的控件。 |--GUI 图形化操作界面,如打开文件对话框 |--GLI 命令行式界面操作,如DOS 建立图形化界面,会单独开一个线程。

二、GUI体系图及组件

	GUI应用原理是,往容器中添加组件,每个组件是具体的对象,不同类型的组件提供不同的功能。
|--GUI体系图如下

  
  
|--Container
	add(Component comp)   添加组件
	move(Component comp) 删除组件
|--Button
	addActionListener(ActionListener l) 
|--TextArea
	append(String str)   向文本域中添加字符串
	setText("")		把文件域设置为空白
|--FileDialog
	|--构造方法:
		FileDialog(Dialog parent, String title, int mode)     mode - 对话框的模式,FileDialog.LOAD 或 FileDialog.SAVE 
	|--方法:
		setVisible(boolean b) 	设置对话框可见
		getDirectory()	 	获取文件的目录
		getFile() 				获取文件名
|--菜单
	|--MenuBar	工具栏
	|--Menu		菜单项
	|--MenuIterm条目项
package guiTest;

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;



public class MyMenuDemo {
	private Frame f;
	private MenuBar mb;
	private Menu m;
	private Menu m1;
	private MenuItem mi;
	private MenuItem mi2;
		
	MyMenuDemo(){
		init();
	}
	
	//界面的初始化
	public void init(){
		//1.创建窗体及组件
		f = new Frame("菜单栏试验");
		mb =new MenuBar();
		m = new Menu("文件");
		m1 = new Menu("子菜单");
		mi = new MenuItem("退出");
		mi2 = new MenuItem("子条目");
				
		//2.设置布局
		f.setBounds(650, 150, 450,500 );
		f.setLayout(new FlowLayout());
	
		
		//3.添加组件
		f.setMenuBar(mb);
		mb.add(m);
		m.add(m1);
		m1.add(mi2);
		m.add(mi);
		
		

		//4.添加监听事件
		myEvent();
		//5.设置可见
		f.setVisible(true);
	}
	
	//建立监听函数myEvent(),用玩完成各类事件的监听
	public void myEvent(){
		
		//监听窗口关闭
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});	
		//退出按钮监听
		mi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
		
	}
	public static void main(String[] args) {
		new MyMenuDemo();
	}

}
运行结果如下:

三、布局及操作规律

布局用于规定添加到容器中的组件的排列方式。有如下几种布局:
		|--FlowLayout(流式布局管理器)
			从左到右的顺序排列
			Panel默认的布局管理器
		|--BorderLayout(边界布局管理器)
			Frame默认的布局管理器
			如果不指定边界位置,那会以覆盖上一个组件方式放在Center
		|--GridLayout(网格布局管理器)
			规则的矩阵
		|--CardLayout(卡片布局管理器)
			选项卡
		|--GridBagLayout(网格包布局管理器)
  			非规则的矩阵

四、GUI的创建步骤

	GUI的创建总体的创建步骤比较固定,
1.创建Frame窗体
	|--继承Frame,创建本类对象,可以在构造方法中初始化对象
	|--创建Frame对象,建立初始化对象函数init();
2.对窗体进行基本设置
	比如大小、位置、布局
3.定义组件,并将组件通过窗体的add方法添加到窗体中
4.添加事件监听(addActionListener)
5.让窗体显示,通过setVisible(true)
		//1.创建Frame窗体
		Frame f = new Frame();
		//2.设置窗体布局
		f.setBounds(400, 300, 400, 300);
		f.setLayout(new FlowLayout());
		//3.定义组件,并添加到容器中
		Button bt = new Button("我是一个按键");
		f.add(bt);
		//4.设置窗体可见
		f.setVisible(true);
		//5.添加监听事件
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.out.println("关闭窗口");
				System.exit(0);
			}
			public void windowActivated(WindowEvent e){
				System.out.println("窗口激活");
			}
		});

五、事件监听机制

|--监听机制的元素 • 事件源(组件) • 事件(Event) • 监听器(Listener) • 事件处理(引发事件后处理方式) |--处理流程
 
 
|--监听的分类
|--窗体事件	addWindowListener(WindowListener l) 
		Frame f = new Frame();
		//监听窗口关闭
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});	
|--Action事件	addActionListener(ActionListener l) 
		Button bt = new Button();
		bt.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				System.out.println("我被点击了…………");				
			}			
		});
|--鼠标事件 addMouseListener(MouseListener l)
<pre name="code" class="java">		Button bt = new Button();
		//鼠标操作事件
		bt.addMouseListener(new MouseAdapter(){
			private int count;
			private int js;
			//鼠标进入按键的监听
			public void mouseEntered(MouseEvent e){
				System.out.println("进入……"+(js++));
			}
			//鼠标点击两次的监听
			public void mouseClicked(MouseEvent e){
				if(e.getClickCount()==2)
					System.out.println("双击………………"+(count++)+"次");
			}
		});
|--键盘事件 addKeyListener(KeyListener l)
		//键盘操作事件
		Button bt = new Button();
		bt.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				System.out.println(e.getKeyChar()+"…………"+e.getKeyCode());
			}
		});
		bt.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
					System.exit(0);
			}			
		});

 
 

六、记事本界面练习

package guiTest;
/**
 *记事本练习:
 *模板系统自带记事本的功能,此事项中是GUI+IO的知识点,其中创建步骤:
 *	GUI:
 *		1.创建Frame窗体
		2.对窗体进行基本设置
			比如大小、位置、布局
		3.定义组件,并将组件通过窗体的add方法添加到窗体中
		4.添加事件监听(addActionListener)
		5.让窗体显示,通过setVisible(true)
 *	IO :
 *		1.明确源和目的。
		2,操作的数据是否是纯文本。
		3,当体系明确后,再明确要使用哪个具体的对象。
 */
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class NoteDemo {
	//建立组件和File类对象
	private Frame f;
	private MenuBar bar;
	private Menu fileMenu;
	private MenuItem closeItem,openItem,saveItem;
	private TextArea ta;
	private FileDialog saveDialog,openDialog;
	private File file;
	//构造函数	
	NoteDemo(){
		//对象一建立就对界面进行初始化
		init();
	}
	
	//界面的初始化函数
	public void init(){
		//1.创建窗体及组件
		f = new Frame("记事本——yeyt");
		ta= new TextArea();
		
		bar =new MenuBar();
		fileMenu = new Menu("文件");
		openItem = new MenuItem("打开");
		closeItem = new MenuItem("退出");
		saveItem = new MenuItem("保存");
		
		saveDialog = new FileDialog(f,"保存——yeyt",FileDialog.SAVE);	//保存对话框	
		openDialog = new FileDialog(f,"打开——yeyt",FileDialog.LOAD);	//打开对话框	
		//2.设置布局
		f.setBounds(650, 150, 650,500 );
			
		//3.添加组件
		f.setMenuBar(bar);
		f.add(ta);
		bar.add(fileMenu);
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(closeItem);

		//4.调用函数,添加所有的监听事件
		myEvent();
		
		//5.设置可见
		f.setVisible(true);
	}
	
	//建立监听函数myEvent(),调用此函数将完成各类事件的监听
	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的监听
		openItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//设置对话框可见
				openDialog.setVisible(true);
				//通过对话框获取文件的路径和文件名
				String dirPath = openDialog.getDirectory();
				String fileName=openDialog.getFile();
				//System.out.println(dirPath+fileName);
				//建立File对象与文件关联
				file = new File(dirPath,fileName);
				//如果文件不存在,则返回GUI界面
				if(!file.exists())
					return;
				//读取文件前,清空文本域
				ta.setText("");
				try {
					//对文件进行读取
					BufferedReader br = new BufferedReader(new FileReader(file));
					String line = null;
					while((line=br.readLine())!=null){
						ta.append(line+"\r\n");
					}
					br.close();//关流
					
				} catch (Exception e2) {
					throw new RuntimeException("读取失败");//抛出运行异常
				}
				
			}
		});
		//保存事件监听
		saveItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//保存前判断文件是否存在,存在时,不打开对话框
				if(file == null){
					saveDialog.setVisible(true);//设置窗体可见
					//获取对话框中的文件路径和文件名
					String dirPath = saveDialog.getDirectory();
					String fileName=saveDialog.getFile();
					//file与文件名关联
					file = new File(dirPath,fileName);
					//如果文件已存在,则返回,什么也不做
					if(!file.exists())
						return;		
				}
				//System.out.println(dirPath+fileName);
				
				try {
					//流的写稿操作
					BufferedWriter bw = new BufferedWriter(new FileWriter(file));
					String text = ta.getText();
					bw.write(text);
					bw.close();
										
				} catch (Exception e2) {
					throw new RuntimeException("读取失败");
				}
			}
		});
		
	}
	public static void main(String[] args) {
		//建立对象运行定义的功能
		new NoteDemo();
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值