Java基础——GUI

GUI(Graphical User Interfase:图形用户接口)

位置:GUI所用对象都存在于 java.Awt 和 javax.Swing两个包中

一.Awt

简介:Abstract Window ToolKit(抽象窗口工具包),依赖于平台,需要调用本地系统方法来实现功能,所以跨平台性稍弱

位置:java.awt包

特点:图形化界面是由多线程控制的,只要增加一个界面,就会多出一个线程,所以界面能够独立于主线程运行

Component类

描述:此类是Awt包中全部组件的基类

方法摘要
 voidsetVisible(boolean b) 
          根据参数 b 的值显示或隐藏此组件。
 voidsetSize(int width, int height) 
          调整组件的大小,使其宽度为 width,高度为 height(所有设置两个坐标的都是前者是横坐标,后者是纵坐标)
 voidsetLocation(int x, int y) 
          将组件移到新位置。
 voidsetBounds(int x, int y, int width, int height) 
          移动组件并调整其大小。
 voidaddKeyListener(KeyListener l) 
          添加指定的按键侦听器,以接收发自此组件的按键事件。
 voidaddMouseListener(MouseListener l) 
          添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。

1.Container类

特点:(1)Container分支与另一个分支区别在于Container分支的全部组件都能添加一个或多个其他组件,通过add()方法

方法摘要
 Componentadd(Component comp) 
          将指定组件追加到此容器的尾部。
 Componentadd(Component comp, int index) 
          将指定组件添加到此容器的给定位置上。
 voidsetLayout(LayoutManager mgr) 
          设置此容器的布局管理器。

1.1 布局方式

FlowLayOut类( 流式布局管理器)

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

(2)特点:组件默认居中,当一行组件填充满时会自动换行。

BorderLayout类( 边界布局管理器)

(1)东、南、西、北、中的顺序排列,Frame、Window默认的布局管理器。

(2)特点:如果不指定方向边界,那么添加的组件会直接居中填充整个窗体显示,之后添加的组件会覆盖之前的

GridLayout类( 网格布局管理器)

(1)规则矩阵布局

GridBagLayout类( 网格包式布局)

(1)一个组件占用多个格子

CardLayout类( 卡片式布局)

(1)不同的选项卡链接到不同页面

1.2 Window类

方法摘要
 voidaddWindowListener(WindowListener l) 
          添加指定的窗口侦听器,以从此窗口接收窗口事件。

1.3 Dialog类

注1:默认BorderLayout边界式布局

构造方法摘要
Dialog(Dialog owner) 
          构造一个最初不可见的、无模式的 Dialog,它带有指定所有者 Dialog 和一个空标题。
Dialog(Dialog owner, String title) 
          构造一个最初不可见的、无模式的 Dialog,它带有指定的所有者 Dialog 和标题。
Dialog(Dialog owner, String title, boolean modal) 
          构造一个最初不可见的 Dialog,它带有指定的所有者 Dialog、标题和模式。(对话框必须依赖于某窗体,布尔值表示是否可对依赖的窗体操作)
Dialog(Frame owner) 
          构造一个最初不可见的、无模式的 Dialog,它带有指定所有者 Frame 和一个空标题。
Dialog(Frame owner, boolean modal) 
          构造一个最初不可见的 Dialog,它带有指定所有者 Frame、模式和一个空标题。(对话框必须依赖于某窗体,布尔值表示是否可对依赖的窗体操作)
Dialog(Frame owner, String title) 
          构造一个最初不可见的、无模式的 Dialog,它带有指定的所有者 Frame 和标题。
Dialog(Frame owner, String title, boolean modal) 
          构造一个最初不可见的 Dialog,它带有指定的所有者 Frame、标题和模式。(对话框必须依赖于某窗体,布尔值表示是否可对依赖的窗体操作)
<
1.3.1 FileDialog类

功能:显示一个对话框,用户可以从中选取文件

字段摘要
static intLOAD 
          此常量值指示文件对话框窗口的作用是查找要读取的文件。
static intSAVE 
          此常量值指示文件对话框窗口的作用是查找要写入的文件。


构造方法摘要
FileDialog(Frame parent) 
          创建一个文件对话框,用于加载文件。(默认mode为LOAD)
FileDialog(Frame parent, String title) 
          创建一个具有指定标题的文件对话框窗口,用于加载文件。(默认mode为LOAD)
FileDialog(Frame parent, String title, int mode) 
          创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。(mode为此类的成员变量值SAVE或者LOAD)


方法摘要
 StringgetDirectory() 
          获取此文件对话框的目录。
 StringgetFile() 
          获取此文件对话框的选定文件。

1.4 Frame类

构造方法摘要
Frame() 
          构造一个最初不可见的 Frame 新实例()。
Frame(String title) 
          构造一个新的、最初不可见的、具有指定标题的 Frame 对象。

2.Button类

构造方法摘要
Button() 
          构造一个标签字符串为空的按钮。
Button(String label) 
          构造一个带指定标签的按钮。

方法摘要
 voidaddActionListener(ActionListener l) 
          添加指定的动作侦听器,以接收发自此按钮的动作事件。
 voidsetMenuBar(MenuBar mb) 
          将此窗体的菜单栏设置为指定的菜单栏。

3.Label类

构造方法摘要
Label() 
          构造一个空标签。
Label(String text) 
          使用指定的文本字符串构造一个新的标签,其文本对齐方式为左对齐。

方法摘要
 StringgetText() 
          获取此标签的文本。
 voidsetText(String text) 
          将此标签的文本设置为指定的文本。

4.TextComponent类

注1:文本组件,包括子类【文本框】与【文本区域】

方法摘要
 StringgetText() 
          返回此文本组件表示的文本。
 voidsetText(String t) 
          将此文本组件显示的文本设置为指定文本。

4.1 TextField类

构造方法摘要
TextField() 
          构造新文本字段。
TextField(int columns) 
          构造具有指定列数的新空文本字段。(列数初始化)

方法摘要
 voidsetText(String t) 
          将此文本组件显示的文本设置为指定文本。

4.2 TextArea类

构造方法摘要
TextArea() 
          构造一个将空字符串作为文本的新文本区。
TextArea(int rows, int columns) 
          构造一个新文本区,该文本区具有指定的行数和列数,并将空字符串作为文本。(行数、列数初始化)


方法摘要
 voidappend(String str) 
          将给定文本追加到文本区的当前文本。

5.一个窗体正确的代码建立格式

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

class java
{
	//定义该图形所需组建的引用
	private Frame frame;
	private Button button;

	java(){
		init();
	}

	private void init(){
		frame = new Frame("我的窗体");
		
		//对Frame进行基本设置
		frame.setSize(500,400);
		frame.setLocation(500,350);
		frame.setLayout(new FlowLayout());

		button = new Button("郑天成※比利");
		
		//将组建添加进frame中
		frame.add(button);

		//添加窗体事件
		event();

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


	}

	private void event(){
		//窗体监听器
		frame.addWindowListener(new WindowAdapter(){
			//关闭功能
			public void windowClosing(WindowEvent e){
				System.exit(0);	
			}
		});
	}
	
	public static void main(String[] args){
		new java();
	}
}

6. MenuComponent类

注意:此类独立于Component基类,自立成派

6.1 菜单的专有名词定义

(1)菜单栏:(菜单条)就是任何窗体上边横向排列的一条

(2)菜单:栏中的每一个就是一个菜单

(3)菜单项:每一个菜单中都有多个菜单项

(4)子菜单:菜单项中可能还有子菜单

6.2 MenuBar类

注1:继承MenuComponent类,菜单栏

注2:添加菜单栏可以通过Frame窗体的setMenuBar()这个方法

构造方法摘要
MenuBar() 
          创建新的菜单栏。

方法摘要
 Menuadd(Menu m) 
          将指定的菜单添加到菜单栏。

6.3 MenuItem类

注1:继承MenuComponent类,菜单项

方法摘要
 voidaddActionListener(ActionListener l) 
          添加指定的动作侦听器,以从此菜单项接收动作事件。

6.3.1 Menu类

注1:继承MenuItem类,菜单

构造方法摘要
Menu(String label) 
          构造具有指定标签的新菜单。

方法摘要
 MenuItemadd(MenuItem mi) 
          将指定的菜单项添加到此菜单。

(1)GUI的笔记本程序

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

/**
*创建一个GUI笔记本程序,并且具有打开,保存,退出的功能
*/

class java
{
	//组件变量
	private Frame frame;
	private TextArea ta;
	private MenuBar bar;
	private Menu doc;
	private MenuItem loadItem,saveItem,exitItem;
	private FileDialog load,save;
	private File savefile;

	//构造
	java(){
		init();
	}

	//构建图形化界面
	private void init(){
		frame = new Frame("窗体");

		frame.setBounds(300,400,500,400);
		
		ta = new TextArea();

		frame.add(ta);

		bar = new MenuBar();
		doc = new Menu("文件");
		loadItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		exitItem = new MenuItem("退出");

		bar.add(doc);
		doc.add(loadItem);
		doc.add(saveItem);
		doc.add(exitItem);

		load = new FileDialog(frame,"打开",FileDialog.LOAD);
		save = new FileDialog(frame,"保存",FileDialog.SAVE);

		frame.setMenuBar(bar);

		event();

		frame.setVisible(true);

	}

	private void event(){
		//窗口退出功能
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});

		//菜单退出功能
		exitItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});

		//菜单打开功能
		loadItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				load.setVisible(true);

				String dir = load.getDirectory();
				String fileName = load.getFile();
				
				File file = new File(dir,fileName);
				//文件不存在返回
				if(!file.exists() && file.isDirectory())
					return;
				BufferedReader bufr = null;

				try{
					bufr = new BufferedReader(new FileReader(file));

					String line = "";

					ta.setText("");

					while((line=bufr.readLine())!=null)
						ta.append(line+"\r\n");

					bufr.close();//方便观看,不再处理
				}catch (IOException oe){
					throw new RuntimeException(oe);
				}
			}
		});

		//菜单的保存功能
		saveItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(savefile==null){
					String dir = save.getDirectory();
					String fileName = save.getFile();
					
					save.setVisible(true);
					
					savefile = new File(dir,fileName);
				
					if(!savefile.exists() && savefile.isDirectory())
						return;
					
					writeToFile();
				}else{
					writeToFile();
				}
			}
		});
	}

	//封装写入文件的方法
	private void writeToFile(){
		try{
			BufferedWriter bufw = new BufferedWriter(new FileWriter(savefile));
			
			String text = ta.getText();
			bufw.write(text);

			bufw.close();
		}catch (IOException ie){
			throw new RuntimeException(ie);
		}
	}
	
	
	public static void main(String[] args) 
	{
		new java();
	}
}

二.Swing

简介:在Awt基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全有Java实现。增强了移植性,属于轻量级的组件。系统依赖性弱

位置:java.Swing包

特:eclipse这个软件是用Swt这个外观包,由IBM小组独立开发的外观包

三.事件监听机制

特点:你会发现事件监听机制这个过程和异常处理 try、catch有点像

1.事件源

(1)事件源(GUI里指的是组件)

2.事件

(2)事件(时间是一类复杂的事物,所以定义为对象。GUI里指的是鼠标或者键盘点击Event,表示对事件源的操作)

3.监听器

(3)监听器(Listener,一个对象,其中定义接收各种Event参数类型的方法)

4.事件处理

(4)事件处理(监听器中每个方法的方法体)



位置:在java.awt.event包中

5.窗口监听器(Window)

5.1 WindowListener接口

方法摘要
 voidwindowActivated(WindowEvent e) 
          将 Window 设置为活动 Window 时调用。(处于系统界面层次最前端时的事件)
 voidwindowClosed(WindowEvent e) 
          因对窗口调用 dispose 而将其关闭时调用。
 voidwindowClosing(WindowEvent e) 
          用户试图从窗口的系统菜单中关闭窗口时调用。
 voidwindowOpened(WindowEvent e) 
          窗口首次变为可见时调用。

5.2 WindowAdapter抽象类

<1>.特点:实现WindowListener接口,虽然是抽象类却没有定义抽象方法,只是实现接口的方法而已,此类中方法为空

<2>.意义:这种抽象类称为适配器,存在意义主要是继承它可以让子类不用强制复写全部方法,复写其中几个有用的方法即可

6.活动监听器(Button)

6.1 ActionListener接口

特点:因为只有一个方法,所以没有适配器。只有少数的监听器没有适配器

方法摘要
 voidactionPerformed(ActionEvent e) 
          发生操作时调用。(按钮只要被活动,不管是鼠标还是键盘或者其他什么,按钮只要被活动即传入活动事件,调用此方法)

7.鼠标监听器 Component

7.1 MouseListener接口

方法摘要
 voidmouseClicked(MouseEvent e) 
          鼠标按键在组件上单击(按下并释放)时调用。(优先于活动监听器执行)
 voidmouseEntered(MouseEvent e) 
          鼠标进入到组件上时调用。(光标移动到组件区域)
 voidmouseExited(MouseEvent e) 
          鼠标离开组件时调用。(光标离开组件区域)
 voidmousePressed(MouseEvent e) 
          鼠标按键在组件上按下时调用。(鼠标按下)
 voidmouseReleased(MouseEvent e) 
          鼠标按钮在组件上释放时调用。(鼠标释放)

7.2 MouseAdapter抽象类

(1)监听器适配器类,不过有自己的特殊方法

7.3 MouseEvent类

注1:此类封装了鼠标事件属性的类

字段摘要
static intBUTTON1 
          指示鼠标按键 #1;由 getButton() 使用。(左键)
static intBUTTON2 
          指示鼠标按键 #2;由 getButton() 使用。(右键)
static intBUTTON3 
          指示鼠标按键 #3;由 getButton() 使用。(中键)

方法摘要
 intgetClickCount() 
          返回与此事件关联的鼠标单击次数。

8.键盘监听器 Component

8.1 KeyListener接口

方法摘要
 voidkeyPressed(KeyEvent e) 
          按下某个键时调用此方法。
 voidkeyReleased(KeyEvent e) 
          释放某个键时调用此方法。

8.2 KeyAdapter抽象类

(1)监听器适配器类,不过有自己的特殊方法

8.3 KeyEvent类

注1:此类封装了键盘事件属性的类,所以键盘上众多按键在此类中都被封装为了成员变量,如下所示

注2:键盘只能在当前事件源上做操作

字段摘要
static intVK_0 
          VK_0 到 VK_9 与 ASCII 的‘0’到‘9’(0x30 - 0x39) 相同
static intVK_A 
          VK_A 到 VK_Z 与 ASCII 的‘A’到‘Z’(0x41 - 0x5A) 相同
static intVK_ENTER 
           


方法摘要
 chargetKeyChar() 
          返回与此事件中的键关联的字符。(返回单个字符,不够用则返回?)
 intgetKeyCode() 
          返回与此事件中的键关联的整数 keyCode。
static StringgetKeyText(int keyCode) 
          返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。(因为键盘上的按键字符有的不只有一个,所以有这个返回字符串的方法)

8.4 InputEvent类

注1:此类是MouseEvent与KeyEvent的父类,相同功能向上抽取得到的类

方法摘要
 booleanisControlDown() 
          返回 Control 修饰符在此事件上是为 down。
 voidconsume() 
          使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。(屏蔽某个按键可以用此方法。不会用默认的方式处理该事件,文本框内输入此方法,输入没有效果,字符不会进入文本框中)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值