ǰλã >> >> 黑马程序?GUI图形用户界面һ
  ϸ

黑马程序?GUI图形用户界面һ

ȶȣ14481   ʱ䣺2013-02-26 00:00:00.0
黑马程序?GUI图形用户界面1

 

---------------------- android培??a target="blank" href="http://edu.csdn.net/heima" style="color: #ca0000; text-decoration: underline; text-align: center; font-size: 12px; line-height: 26px;">java培?、期待与您交流! ----------------------

 

 

GUI图形用户界面

 

 

GUI(图形用户界面)

GUI-Graphical User Interface(图形用户接口)?/p>

用图形的方式,来显示计算机操作的界面,这样更方便更直观??/p>

CLI-Command line User Interface (命令行用户接口)

就是常?的Dos命令行操作??/p>

?要?忆一些常用的命令,操作不直??/p>

 

举例? 

比?:创建文件夹,或者删除文件夹?/p>

Java为GUI提供的?象都存在java.Awt和javax.Swing两个包中?/p>

Awt和Swing

Awt?Swing

java.Awt:Abstract Window ToolKit (抽象窗口工具?,需要调用本地系统方法实现功能?属重量级控件?比较依赖平台,跨平台?不?好,会有细微的区???/p>

javax.Swing:在AWT的基?上,建立的一套图形界面系统,其中提供了更多的组件,?且完全由Java实现。?强了移?性,属轻量级控件?/p>

eclipse?swt做的?/p>

Container:为容器,是??殊的组件,?组件?以?过add方法添加其他组件进来?/p>

 

 

布局管理?/p>

容器?组件的排放方式,就是布局?/p>

常?的布?管理?

FlowLayout(流式布?管理?

从左到右的顺序排列??/p>

Panel默?的布?管理器??/p>

 

BorderLayout(边界布?管理?

东,南,西,北,?/p>

Frame默?的布?管理器??/p>

 

GridLayout(网格布?管理?

规则的矩?/p>

CardLayout(卡片布?管理?

选项?/p>

GridBagLayout(网格包布局管理?

非?则的矩阵

 

坐标式布?才是?好的,可以用图形化编辑器,?GBuilder或?eclipse添加图形化插件?就具有画布,需要什么组件?什么组件,?切换到代码模式代码全部生成??/p>

 

如果??口中?要用到?种布?形式,可以线划分为??板,然后定义各个面板的布?形式?/p>

 

图形化界面是由另外的线程控制的??/p>

设置窗口的尺寸???数是?标,??纵坐标??/p>

建立??单的窗体

Container常用子类:Window   Panel(面板,不能单独存在。)

Window常用子类:Frame  Dialog

?单的窗体创建过程?/p>

Frame  f = new Frame(“my window?;

f.setLayout(new FlowLayout());

f.setSize(500,400);//设置窗体大小

f.setLocation(300,200);//设置窗体出现在屏幕的位置

f.setVisible(true);

 

 

创建图形化界?

1,创建frame窗体?/p>

2,?窗体进?基本设置?/p>

比?大小,位?布局?/p>

3,定义组件??/p>

4,将组件通过窗体的add方法添加到窗体中?/p>

5,?窗体显示,?过setVisible(true)

 

 

事件监听机制的特点:

1.事件源(组件?/p>

2.事件(Event?/p>

3.监听?Listener?/p>

4.事件处理(引发事件后处理方式?/p>

 

事件源:就是awt包或者swing包中的那些图形界面组件??/p>

 

事件:每??件源都有?特有的?应事件和共?事件??/p>

 

监听?将可以触发某??件的动作(不??作)都已经封装到了监????/p>

 

以上三?,在java?已经定义好了?/p>

直接获取其?象来用就?了??/p>

 

我们要做的事情是,就??产生的动作进行?理??/p>

WindowAdapter类是??象类,内部没有抽象方法,抽象?不?创建对象,是WindowListener的子类,覆盖了WindowListener类中的方法,但是方法体内?,所以调用没有意义,

 

	import java.awt.*;import java.awt.event.*;class  AwtDemo{	public static void main(String[] args) 	{		Frame f = new Frame("my awt");		f.setSize(500,400);		f.setLocation(300,200);		f.setLayout(new FlowLayout());		Button b = new Button("我是???);				f.add(b);		//监听机制??成匿名内部类		f.addWindowListener(new WindowAdapter()		{			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("我?打开?hahahhahah");			}		});		f.setVisible(true);	}}

 

因为WindowListener的子类WindowAdapter已经实现了WindowListener接口?并?盖了其中的所有方法?那么我??继承自Windowadapter覆盖我需要的方法即可?/p>

 

class MyWin extends WindowAdapter{	public void windowClosing(WindowEvent e)//覆盖WindowAdapter?方法?	{		//System.out.println("window closing---"+e.toString());//该动作触发一次打印一次??		System.exit(0);//关闭虚拟?	}}

 

 

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?		//面向对象的?想,?谁进行操作谁就提供操作的方法?		*///ActionListener??有?配器的接口,因为内部方法只有一?适配器是为了让子类方便使?没有适配器的接口?三个,一?口中有三?上方法的都有适配器??		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();	}}

 

 

鼠标事件和键盘事?/p>

 

import java.awt.*;import java.awt.event.*;class MouseAndKeyEvent {	private Frame f;	private Button but;	private TextField tf;	MouseAndKeyEvent()	{		init();	}	public void init()	{		f = new Frame("my frame");		f.setBounds(300,100,600,500);		f.setLayout(new FlowLayout());		tf = new TextField(20);//创建单?文本?		but = new Button("my button");		f.add(tf);		f.add(but);		myEvent();		f.setVisible(true);	}	private void myEvent()	{		f.addWindowListener(new WindowAdapter()		{			public void windowClosing(WindowEvent e)			{				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(code+".....?法的");					e.consume();//如果字?非法,使用consume方法?不?字?进入文本?				}			}		});		//给But添加??盘监???		but.addKeyListener(new KeyAdapter()		{			public void keyPressed(KeyEvent e)			{	//判断ctrl?否?按下				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)					//System.exit(0);				System.out.println("ctrl+enter is run");				System.out.println(e.getKeyChar()+"---"+e.getKeyCode());//根基?字?获取??应的?				//根据?码获取到?文本,返回的?符串?				System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());			}		});		//?给按?加活动监???活动就执行,鼠标?都能让按??		//添加事件的时候尽量添加ActionEvent		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) 			{				System.out.println("鼠标进入到?组件"+count++);			}			//双击监听			public void mouseClicked(MouseEvent e)			{				if(e.getClickCount()==2)//双击的时候获取鼠标连击?数,如果连击次数?就是双击?					System.out.println("双击动作"+clickCount++);			}			//单击			public void mouseClicked(MouseEvent e)			{					System.out.println("单击动作"+clickCount++);			}		});			}	public static void main(String[] args) 	{		new MouseAndKeyEvent();	}}

 

 

 

 

---------------------- android培??a target="blank" href="http://edu.csdn.net/heima" style="color: #ca0000; text-decoration: underline; text-align: center; font-size: 12px; line-height: 26px;">java培?、期待与您交流! ----------------------

  ؽ