现在的位置: 首页 > 综合 > 正文

32、AWT(Abstract Window Toolkit)

2018年02月05日 ⁄ 综合 ⁄ 共 5827字 ⁄ 字号 评论关闭

GUI(Graphical User Interface),图形用户界面

关于文件的打包(形成.jar文件),myeclipse的File——>Export——>Java目录下的Jar File

打包文件中含有META-INF目录,此目录下包含一个MANIFEST.MF文件,此文件指出了当双击Jar文件要执行的含有main方法的类名,文件内容如下:

Manifest-Version: 1.0

Created-By:XXXXXXXX

Main-Class:XXXXX

1、Java GUI有两种:

       1)AWT(Abstract Window Toolkit),抽象窗口工具集,第一代的javaGUI组建,是重量级的。

        2)Swing,不依赖于底层细节,轻量级的组件。

2、AWT概念。GUI全称是Graphical User Interface,即图形用户界面。根据作用GUI组件可分为基本组件和容器。

      组件又称构件,诸如按钮、文本框之类的图形界面元素;容器其实是一种比较特殊的组件,可以容纳其他组件,如窗口、对话框等;所有的容器类都是java.awt.Container的直接或间接子类。

      AWT提供基本的GUI组件,用在所有的Java applets及应用程序中;具有可以扩展的超类,他们的属性是继承的;确保显示在屏幕上的每个GUI组件都是抽象类组件的子类;Container,他是Component的一个子类,而且包括两个主要子类:Panel和Window

      基本的AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上(windows、unix等)的本地GUI工具进行处理。

3、Container的两个主要类型是Window和panel

      Window是java.awt.Window的对象。Window是显示屏上独立的本机窗口,它独立于其他容器;

      Window有两种形式:Frame(框架)和Dialog(对话框)。Frame和Dialog是Window的子类。Frame是一个带有标题和缩放角的窗口。对话框没有菜单条,尽管他能移动,但他不能缩放。

      Panel是java.awt.Panel的对象。panel包含在另一个容器中,或者是在Web浏览器的窗口中。Panel确定一个四边形,其他组件可以放入其中。Panel必须放在Window之中(或Window的子类中)以便能显示出来。注意:容器不但能容纳组件,还能容纳其他容器,这一事实对于建立复杂的布局是关键的,也是基本的

4、容器里的组件的位置和大小是由布局管理器决定的;可以通过停用布局管理器来控制组件的大小或位置;然后必须用组件上的setLocation(),setSize(),或者setBounds()来定位它们在容器里的位置。

      容器里的组件的位置和大小是由布局管理器决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位一个组件时,他将调用布局管理器来做。当决定一个组件的大小时,同样如此。布局管理器完全控制容器内的所有组件。他负责计算并定义上下文中对象在实际屏幕中所需的大小。

5、Frames:是Window的子类;具有标题和缩放角;从容器继承并以add方式添加组件;能以字符串规定的标题来创建不可见框架对象;能将BorderLayout当做缺省布局管理器;用setLayout方式来改变缺省布局管理器。

 

import java.awt.Color;
import java.awt.Frame;

public class MyFrame extends Frame
{
	public MyFrame(String title)
	{
		super(title);
	}
	
	public static void main(String[] args)
	{
		MyFrame frame =new MyFrame("first");
		
		frame.setSize(500, 500);
		frame.setBackground(Color.CYAN);
		frame.setVisible(true);
	}
}

6、Panels:为组件提供空间;允许子面板拥有自己的布局管理器;以add方法添加组件:像Frames一样,Panels提供空间来连接任何GUI组件,包括其他面板。每个面板都是可以有他自己的布局管理器;一旦一个面板对象被创建,为了能看得见,他必须添加到窗口或框架对象上。用Container类中的add()方式可以做到这一点。

import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;

public class FrameWithPanel extends Frame
{
	public FrameWithPanel(String title)
	{
		super(title);
	}
	
	public static void main(String[] args)
	{
		FrameWithPanel frame = new FrameWithPanel("title111");
		
		Panel panel = new Panel();
		
		frame.setSize(200, 200);
		frame.setBackground(Color.YELLOW);
		frame.setLayout(null);
		
		panel.setSize(100,100);
		panel.setBackground(Color.blue);
		
		frame.add(panel);
		frame.setVisible(true);
	}
}

7、布局管理器:容器里的组件的位置和大小是由布局管理器来决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位一个组件时,他将调用布局管理器来完成。当决定一个组件大小时,也是如此。在AWT中,给我们提供了五种布局管理器:BorderLayout,FlowLayout,GridLayout,CardLayout,GridBagLayout。

      容器中的组件的布局通常由布局管理器控制。每个Container(比如一个Panel或一个Frame)都有一个与他相关的缺省布局管理器,他可以通过调用setLayout()来改变;布局管理器负责决定布局方针以及其容器的每个子组件的大小;我们可以通过设置空布局管理器,来控制组件的大小和位置。调用setLayout(null)。;在设置空布局管理器后,必须对所有的组件调用setLocation(),setSize()或setBounds(),将它们定位在容器中。

8、默认布局管理器(图):

 

9、Flow布局管理器:与其他布局管理器不一样,Flow布局管理器不限制他所管理的组件的大小,而是允许它们有自己的最佳大小;默认是居中放置组件;如果想在组建之间创建一个更大的最小间隔,可以规定一个界限;当用户对由Flow布局管理器的区域进行缩放时,布局就会发生变化。

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());
		
		b1 = new Button("hello");
		b2 = new Button("world");
		b3 = new Button("hello world");
		
		frame.add(b1);
		frame.add(b2);
		frame.add(b3);
		
		frame.setSize(100, 100);
		frame.setVisible(true);
	}
	public static void main(String[] args)
	{
		MyFlow flow = new MyFlow();
		flow.go();
	}
}

 

10、Border布局管理器:为在一个Panel或Window中放置组件提供一个更复杂的方案,Border布局管理器包括五个明显的区域:东、南、西、北、中;北占据面板的上方,东占据面板的右侧,等等;中间区域是在东南西北都填满后剩下的区域;当窗口垂直延伸时,东、西、中区域也延伸;而当窗口水平延伸时,东西中区域也延伸;当窗口缩放时,按钮相应的位置不变化,但其大小改变。

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

public class ExGui
{
	private Frame frame;
	private Button button1;
	private Button button2;
	
	public void go()
	{
		frame = new Frame("title:ccc");
		frame.setLayout(new FlowLayout());
		
		button1 = new Button("press me");
		button2 = new Button("do'nt press");
		
		frame.add(button1);
		frame.add(button2);
		
		frame.pack();
		frame.setVisible(true);
		
	}
	public static void main(String[] args)
	{
		ExGui window = new ExGui();
		window.go();
	}
}

BoderLayout是Frame类的默认布局管理器;BorderLayout将整个容器的布局划分为东西南北中五个区域,组件只能被添加到指定的区域;如果不指定组件的加入部位,则默认加入到Center区域;每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃。

BorderLayout型布局容器尺寸缩放原则:

    -北、南两个区域只能在水平方向缩放(宽度可调整)

    -东、西两个区域只能在垂直方向缩放(高度可调整)

    -中部可在两个方向上缩放

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

public class ExGui2
{
	private Frame frame;
	private Button bn,bs,bw,be,bc;
	public void go()
	{
		frame = new Frame("Border Layout");
		
		bn = new Button("bn");
		bs = new Button("bs");
		bw = new Button("bw");
		be = new Button("be");
		bc = new Button("bc");
		
		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 window = new ExGui2();
		window.go();
	}
}

11、Grid布局管理器:为放置组件提供了灵活性。用许多行和栏来创建管理程序。然后组件就填充到由管理程序规定的单元中;比如,由语句new GridLayout(3,2)创建的有三行两栏的Grid布局能产生六个单元;Grid布局管理器总是忽略组件的最佳大小,所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的,同样的,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的。

将组件添加到网格中的命令决定它们占有的单元,单元的行数是从左到右填充,就像文本一样,而列是从上到下由行填充。

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));
		
		b1 = new Button("1");
		b2 = new Button("2");
		b3 = new Button("3");
		b4 = new Button("4");
		b5 = new Button("5");
		b6 = new Button("6");
		frame.add(b1);
		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();
	}

}

12、布局管理器总结:Frame——Frame是一个顶级窗口;Frame的缺省布局管理器是BorderLayout。

      Panel——Panel无法单独显示,必须添加到某个容器中;Panel的缺省布局管理器为FlowLayout;当把Panel作为一个组件添加到某个容器后,该Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显示多个组件。

      在程序中安排组件的位置和大小时,应注意:1)容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。2)如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null);

抱歉!评论已关闭.