J2SE II:图形技术GUI

GUI:(Graphical Vser Interface 图形用户接口)是指采用图形方式显示的计算机操做用户界面。GUI便捷、准确,实用性很强,主要功能是实现人与计算机等电子设备的人机交互。java

Java为GUI提供的对象java.Awt和javax.Swing两个包中。函数

1)java.Awt:工具

Abstract Window ToolKit (抽象窗口工具包),须要调用本地系统方法实现功能。属重量级控件。布局

2)javax.Swing:学习

在AWT的基础上,创建的一套图形界面系统,其中提供了更多的组件,并且彻底由Java实现。加强了移植性,属轻量级控件。设计

优势:3d

(1)swing拥有一个丰富、便捷的用户界面元素集合。code

(2)swing对平台的依赖很小,意味着他有不多的关于平台的bug。orm

(3)给予用户一致的感受。给予用户一致的感受。对象

继承关系图:

img

Component:组件

Checkbox:复选框

TextComponen:文本组件,文本框和文本域。

Container:为容器,是一个特殊的组件,该组件中能够经过add方法添加其余组件进来。

Button:按钮标签,当按下该按钮时,应用程序能执行某项动做;

Label:是一个可在容器中放置文本的组件,一个标签只显示一行只读文本;

Checkbox:复选框是一个可处于“开”(true) 或“关”(false) 状态的图形组件。单击复选框可将其状态从“开”更改成“关”,或从“关”更改成“开”;

Frame:是带有标题和边框的顶层窗口;

TextComponent:是全部容许编辑文本的组件的超类;

Window:是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是 BorderLayout;

Panel :面板,是最简单的容器类。应用程序能够将其余组件放在面板提供的空间内,这些组件包括其余面板;

Frame: 是带有标题和边框的顶层窗口;

Dialog:对话框, 带标题和边界的顶层窗口,边界通常用于从用户处得到某种形式的输入;

FileDialog :文本对话框,用户能够从中选择文件;


常见的布局管理器:

1)FlowLayout:

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

构造方法:

① FlowLayout() 构造一个新的 FlowLayout,居中对齐,默认的水平和垂直间隙是 5 个单位。

② FlowLayout(intalign) 构造一个新的 FlowLayout,对齐方式是指定的,默认的水平和垂直间隙是 5 个单位。

③ FlowLayout(intalign, int hgap, int vgap) 建立一个新的流布局管理器,具备指定的对齐方式以及指定的水平和垂直间隙。

2)BorderLayout:

边界布局管理器,东,南,西,北,中,Frame默认的布局管理器。

构造方式:

① BorderLayout() 构造一个组件之间没有间距的新边界布局。

②BorderLayout(int hgap, int vgap) 用指定的组件之间的水平间距构造一个边界布局。

3)GridLayout: 网格布局管理器,规则的矩阵。

构造方式:

①GridLayout() 建立具备默认值的网格布局,即每一个组件占据一行一列。

② GridLayout(int rows, int cols) 建立具备指定行数和列数的网格布局。

③GridLayout(int rows, int cols, int hgap, int vgap) 建立具备指定行数和列数的网格布局,并将水平和垂直间距设置为指定值。

4)CardLayout: 卡片布局管理器,选项卡。

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

建立图形化界面步骤:

  1. 建立fame窗体; Frame f = new Frame("窗体名");

  2. 对窗体进行基本设置,例如大小,位置,布局;

    ①调整组件大小: void setSize(int width , int height); 【宽为width,长为height】

    ②组建移动到指定位置: void setLocation(int x , int y);

    ③ 设置容器的布局管理: voidsetLayout(LayoutManager mgr);

  3. 定义组件; 例:Button b = new Button("组件名称");

  4. 将组建经过窗体的add方式添加到窗体中;

  5. 让窗体显示: void setVisible(boolean b)

    例:

import java.awt.*;

class AwtDemo 
{
	public static void main(String[] args) 
	{
		//定义Frame对象,并在参数位置传入窗体名
		Frame f = new Frame("个人窗体");
		//定义窗体大小
		f.setSize(300,300);
		//设置窗体的位置
		f.setLocation(400,300);
		//指定布局管理器
		f.setLayout(new FlowLayout());
		//定义一个按钮组件,并在参数中传入组件名称
		Button b = new Button("我是按钮");
		//将组建添加到窗体中
		f.add(b);
		//让窗体显示
		f.setVisible(true);
	}
}

####事件监听机制:

1,事件监听机制的特色:

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

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

(3)监听器(Listener):将能够触发某一个事件的动做(不仅一个动做)都封装在监听器中。

(4)事件处理:

实现窗体关闭功能实例:

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

class AwtDemo2 
{
	public static void main(String[] args)
	{
		//定义Frame对象,并在参数位置传入窗体名
		Frame f = new Frame("个人窗体");
		//定义窗体大小
		f.setSize(300,300);
		//设置窗体的位置
		f.setLocation(400,300
		//指定布局管理器
		f.setLayout(new FlowLayout());
		//定义一个按钮组件,并在参数中传入组件名称
		Button b = new Button("我是按钮");
		//将组建添加到窗体中
		f.add(b);
		//为窗体添加监听器,将适配器做为参数传入构造函数中,定义内部类
		f.addWindowListener(new WindowAdapter()
		{
			//复写WindowAdapter类中的方法,建立本身的事件处理方式
			//点X能够关闭窗口,并输出语句
			public void windowClosing(WindowEvent e)
			{
				//输出语句
				System.out.println("再见!");
				//程序结束
				System.exit(0);
			}
			//激活窗口时显示被激活
			public void windowActivated(WindowEvent e)
			{
				System.out.println("我激活了!");
			}
			//窗口一创建就输出信息
			public void windowOpened(WindowEvent e) 
			{
				System.out.println("你好!");
			}
		});
		//让窗体显示
		f.setVisible(true);
	}
}

WindowAdapter中的部分方法展现:

①void windowClosing(WindowEvent e) 窗口正处于关闭过程当中调用; ②void windowActivated(WindowEvext e) 激活窗口时调用; ③void windowOpend(WindowEvent e) 打开窗口时调用;

鼠标事件和键盘事件:

import java.awt.*;
import java.awt.event.*;
 
class MouseAndKeyEvent {
	private Frame f;
	private Button but;
	private TextField tf;
	
	MouseAndKeyEvent(){
		init(); //初始化GUI界面
	}
	
	public void init(){
		f = new Frame("my frame");
		
		f.setBounds(300,100,600,500); //移动窗口到(300,100)位置,并调整大小为宽600长500.
		f.setLayout(new FlowLayout());  //设为流水布局
		f.setVisible(true);   //显示窗口
		
		but = new Button("退 出"); //按钮
		tf = new TextField(20);  //20是这个单行文本框的列数 
		
		f.add(tf);  //窗口中添加文本框
		f.add(but); //窗口中添加按钮
		
		myEvent(); //事件处理
	}
	
	private void myEvent() { //事件处理
		//窗体事件的处理
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		
		//按钮的Action事件的处理。
		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){ //鼠标进入but按钮的范围,触发鼠标进入事件。
				System.out.println("鼠标进入到该组件"+count++);
			}
			public void mouseClicked(MouseEvent e){ //双击动做
				if(e.getClickCount()==2)
					System.out.println("鼠标双击击事件"+clickcount++);
			}
		});
		
		//键盘事件,给But添加一个键盘监听,敲键盘则按钮响应。
		but.addKeyListener(new KeyAdapter(){  //匿名内部类。
			public void keyPressed(KeyEvent e){
				int n = e.getKeyCode();
				String s = e.getKeyText(n);
				System.out.println(s);
				if(s.equals("Enter"))
					System.out.println("回车键"+"..n:"+n+"..s:"+s);
				if(e.getKeyCode()==KeyEvent.VK_ESCAPE)  //使用静态常量,"Esc"键退出。
					System.exit(0);
			}
		});
		
		//单行文本框
		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.consume(); //不使用默认的方式处理此事件。
					             //使用了此方法,则键盘敲'A'时,字母'a'不会再进入文本框。
				}
			}
		});
	}
	
	public static void main(String[] args){
		new MouseAndKeyEvent();
	}
}

菜单栏:

Menu:菜单,继承MenuItem,有右三角的图标存在,可添加Menu和MenuItem; MenuBar:菜单栏,可添加菜单和菜单条目。通常先建立菜单栏,再建立菜单; MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项;

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

class MyMenuDemo {
	private Frame f;  //窗体
	private MenuBar mb; //菜单栏
	private Menu m,subMenu; //菜单
	private MenuItem closeItem,subItem; //菜单项
	MyMenuDemo(){
		init(); //初始化GUI界面
	}
	//初始化
	public void init(){ 
		f = new Frame("my window");  //建立框体
		f.setBounds(300,100,500,600); //设置大小
		f.setLayout(new FlowLayout()); //设置布局
		f.setVisible(true); //显示Frame窗体
		mb = new MenuBar(); //菜单栏
		m = new Menu("文件"); //菜单栏中的一个菜单 
		subMenu = new Menu("子菜单"); 
		closeItem = new MenuItem("退出"); //菜单下拉中的一个菜单项 
		subItem = new MenuItem("子条目");
		m.add(closeItem);  //把菜单项添加到菜单中 
		m.add(subMenu);   //菜单中添加一个子菜单 
		subMenu.add(subItem);  //子菜单中添加一个菜单项 
		mb.add(m);        //把菜单添加到菜单栏中 
		f.setMenuBar(mb); //将此Frame窗体的菜单栏设置为指定的菜单栏 
		myEvent(); //事件处理
	}
	public void myEvent(){
		//窗体监听器,点右上角的X号能关闭窗体 
		f.addWindowListener(new WindowAdapter(){ 
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		//"退出"菜单项的监听,实现点击退出
		closeItem.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
	}
	public static void main(String[] args){
		new MyMenuDemo();
	}
}

最后了解一下GUI应用领域:手机通信移动产品,电脑操做平台,软件产品,车载系统产品,智能家电产品,游戏产品,网页设计等等

谢谢你们阅读,若是想要知道更多java基础知识,能够戳我一块儿交流学习!

相关文章
相关标签/搜索