浅述GUI和AWT(实例详解)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/listenTOknow/article/details/17011295

“随着 Internet 的飞速发展,Java 技术也得到了越来越广泛的应用。而无论我们是采用 J2SE、J2EE 还是 J2ME,GUI 都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在 Java 中进行 GUI 设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多 Java 程序员抱怨的事情。但 GUI 已经成为程序发展的方向,所以我们也必须了解 Java 的 GUI 设计方法和特点。其实,采用 Java 提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比 VB 麻烦许多。”。初学GUI和AWT,不知GUI和AWT现如今现状如何,特意上网搜索一下,摘抄了一段。现在转入正题。

(Graphical User Interface)图形用户界面。AWT(Abstract Window Toolkit)抽象窗口工具集,第一代的 Java GUI 组件,是重量级的。

1.AWT包及其组件:

所有和AWT编程相关的类都放在java.awt包以及它的子包中:

AWT定义了Container,Componet及LayoutManager等;使用LayoutManager;使用Flow(流式,)Border,Grid及Card布局管理器来获得动态布局;使用Frame及panel;


2.容器及布局 :

1).按作用分类:

1.基本组件(构件:按钮,文本框 );

2.容器(容纳其它组件,所有容器都是java.awt.Container的直接或间接子类)。

 基本的AWT库处理方法是把这些元素的创建和行为委托给每个目标平台(Windows,Unix,Macintosh)上的本地GUI工具进行处理。实现了跨平台。 

2)window和Panel:

Container是Componet的一个子类,包括两个主要子类:window,Panel

1-Window(窗口)是Java.awt.window的一个对象,有两种形式:Frame(框架)和Dialog(对话框),他们都是window的子类。

1].Frame(框架)是一个带有标题、边框和缩放的窗口;是window的子类,从容器继承并以add(方式添加组件。能以字符串的标题创建不可见的框架对象,能将BorderLayout当做缺省布局管理器,能用setLayout方式改变缺省布局管理器。 

2].Dialog(对话框)能移动不能缩放。

2- Panel(面板)是Java.awt.panel的对象。Panel包含在另一个容器中,或者是web浏览器的窗口中。Panel确定一个四边形,其组件可以放入其中。Panel必须在window中才能显示出来。Panel可嵌套。容器里组件的位置和大小是由布局管理器决定的;然后要用组建的serLocation()设置位置,setSize()设置大小,或setBounds()设置边框,来定位在容器中多个位置。

 

3.AWT中提供了5种布局管理器:

1.BorderLayout:windows

2.FlowLayout:planel

3.GridLayout

4.CardLayout

5.GridBagLayout

 默认的布局管理器:

 

1.BorderLayout:

在一个Panel或window中放置一个组件提供一个更复杂的方案。窗口缩放,按钮位置布局不变,大小改变。BorderLayout是Frame类的默认布局管理器;将整个容器布局划分成东西南北中,只能将组建添加到指定区域(默认为center);每个区域只能加入一个组件。


实例:

package AWT;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

public class EXGui2 {
	//Border Layout实例
	private Frame frame;
	
	private Button bn,bs,bw,be,bc;//设置5个按钮
	
	public void go(){
		
		frame =  new Frame("Border Layout");
		
		bn = new Button("B2");//若注释掉本行,b3,b4,b5部分会自动延伸覆盖此位置
		bs = new Button("B1");		
		bw = new Button("B3");
		be = new Button("B4");
		bc = new Button("B5");
		
		frame.add(bn,BorderLayout.NORTH); //将第一个按钮增加到北边
		frame.add(bs,BorderLayout.SOUTH); //将第一个按钮增加到南边
		frame.add(bw,BorderLayout.WEST);  //将第一个按钮增加到西边
		frame.add(be,BorderLayout.EAST);  //将第一个按钮增加到东边
		frame.add(bc,BorderLayout.CENTER); //将第一个按钮增加到中间
		 
		frame.setSize(200,200);//设置窗口大小
		frame.setVisible(true);//设置窗口可见
	}
	
	public static void main(String[] args) {
		
		EXGui2 gui = new EXGui2();
		
		gui.go();
	}
	
}
运行结果:

2.FlowLayout:

他不限制他所管理的组件的大小,而是允许他们有自己的最佳大小;默认居中存放;

缩放位置布局发生变化;

实例:

package AWT;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class MyFlow {
	
	private Frame frame ;
	
	private Button b1,b2 ,b3;
	
	public void go(){
		
		frame = new Frame("Flow Layout");
		
		frame.setLayout(new FlowLayout());//使用FlowLayout替换掉默认的BorderLayout布局管理器
		
		b1 = new Button("hello");		
		b2 = new Button("world");		
		b3 = new Button("welcome");
		
		frame.add(b1);//将b1添加到对象frame中
		frame.add(b2);//将b2添加到对象frame中
		frame.add(b3);//将b3添加到对象frame中
		
		frame.setSize(200,200);//设置窗体大小
		frame.setVisible(true);//设置窗体可见
		
	}
	
	public static void main(String[] args) {
		
		MyFlow flow = new MyFlow();
		
		flow.go();
		
		
	}
	
}
运行结果:



3.GridLayout(网格):

为放置组件提供了灵活性。用行列管理,然后将组件填充到由管理程序规定单元里。它总是忽略组建的最佳大小,所有单元宽度和高度相同,根据单元数对可用宽度和高度进行平分。若缺少元素,则空着。

实例:

package AWT;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

public class GridEX {

	private Frame frame;
	
	private Button b1,b2,b3,b4,b5,b6;
	
	public void go(){
		
		frame = new Frame("Grid Layout");
		
		frame.setLayout(new GridLayout(3,2));//设置3*的网格
		
		b1= new Button("1");//设置button显示
		b2= new Button("2");
		b3= new Button("3");
		b4= new Button("4");
		b5= new Button("5");		
		b6= new Button("6");
		
		frame.add(b1);//把b1添加到frame对象
		frame.add(b2);
		frame.add(b3);
		frame.add(b4);
		frame.add(b5);
		frame.add(b6);
		
		frame.pack();//压缩成最小大小
		frame.setVisible(true);
		
	}
	
	public static void main(String[] args) {
		GridEX grid = new GridEX();
		
		grid.go();
	}
}
运行结果:

 

布局管理器 总结:

 

Frame:顶级窗口,默认BorderLayout布局管理器

Panel:无法单独显示,必须添加到某个容器当中;默认FlowLayout布局管理器;把panel作为组件添加到某个布局管理器中后,panel仍旧可以使用自己的布局管理器。因此,可用BorderLayout添加多个panel组件。

若要自定义组件的大小或者位置,则需要取消该容器的布局管理器:setLayout(null)。


 参考资料:

1.文枫 (wenfb@sina.com):Java 图形用户界面设计

2.googledreamzte的空间GUI(图形用户界面)和AWT;

3.圣思园张龙老师Java教学视频。

展开阅读全文

没有更多推荐了,返回首页