黑马程序员_JAVA 用户图形界面(GUI)

------- android培训、java培训、期待与您交流! ----------

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中
 
Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件
Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件
Container(容器),该组件可以通过add方法添加其他组件进来。
容器中组件的排放方式就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器)从左到右的顺序排列。Panel默认的布局管理器。
BorderLayout(边界布局管理器)东,南,西,北,中Frame默认的布局管理器。
GridLayout(网格布局管理器)规则的矩阵
CardLayout(卡片布局管理器)选项卡
GridBagLayout(网格包布局管理器)非规则的矩阵


Container内部封装的是集合。
图形化界面是由一个线程控制的。
Frame刚创建的时候不可见。默认的是边界布局管理器。
1,必须通过setVisible()方法设置可见
2,要通过setSize()方法设置大小。
3,通过setLocation()设置弹出窗口的位置
4,通过setLayout()方法设置使用的布局管理器。
5,以上2,3方法可以被setBounds()方法取代。
事件监听机制特点:
1,事件源(图形界面组件)
2,事件(每一个事件源特有的对应事件和共性事件)
3,监听器(将可以触发某一个事件的动作封装到了监听器中)
以上三者在java中已经定义好了,直接获取其对象就可以了。
4,事件处理(我们要做的)
常用的事件监听器:
    ActionListener(活动监听器),WindowListener, KeyListener (键盘监听器),MouseListener(鼠标监听器)
因为这些监听器都是借口,有时候我们没有必要重写所有的抽象方法,所以我们可以使用抽象适配器(实现了全部的抽象方法,但是方法体为空),这样我们只需要重写需要重写的方法即可。
事件监听机制的书写步骤:
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)

 

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


class  FrameDemo
{

	//定义该图形中所需的组件的引用。
	private Frame f;
	private Button but;

	FrameDemo()
	{
		init();
	}

	public void init()
	{
		f = new Frame("my frame");

		//对frame进行基本设置。
		f.setBounds(300,100,600,500);
		f.setLayout(new FlowLayout());

		but = new Button("my button");

		//将组件添加到frame中
		f.add(but);


		//加载一下窗体上事件。
		myEvent();

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

	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

		//让按钮具备退出程序的功能
		/*
		按钮就是事件源。
		那么选择哪个监听器呢?
		通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
		需要查看该组件对象的功能。
		 通过查阅button的描述。发现按钮支持一个特有监听addActionListener。

		*/
		but.addActionListener(new ActionListener()
		{
			private int count = 1;
			public void actionPerformed(ActionEvent e)
			{
				//System.out.println("退出,按钮干的");
				//System.exit(0);
				
				//f.add(new Button("Button-"+(count++)));
				//f.setVisible(true);
				//f.validate();

				//System.out.println(e.getSource());
				Button b = (Button)e.getSource();
				
				Frame f1 = (Frame)b.getParent();

				f1.add(new Button("button-"+count++));
				f1.validate();


			}
		});
	}



	public static void main(String[] args) 
	{
		new FrameDemo();
	}
}


 

 

你可能感兴趣的:(java,Swing,Awt,Frame,Panel)