黑马程序员——GUI

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

< 今日心情 >放掉懒惰,再加上一份坚持

一、Awt和Swing

1、java.Awt:
Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。
属重量级控件。
2、javax.Swing:
在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性。
属轻量级控件。

二、继承关系图



三、图形化界面示例

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindow
{
	/*
		创建图形化界面:
			1.创建frame窗体
			2.设置窗体布局,如位置大小、布局模式
			3.定义组件
			4.将组件添加到窗体中
			5.设置窗体可见
	
	*/
	private Frame wMain;
	
	private Panel mUp,mBotom;
	private TextField inputDir;
	private TextArea content;
	private Button btn;

	private Dialog erroyDialog;
	private Label erroyMessage;
	private Button erroyBtn_ok;

	private MenuBar fileMB;
	private Menu fileMenu;
	private MenuItem fmClose;

	private Menu fmOpen;
	private MenuItem[] fmOpenItem;

	private MenuItem save,saveAs;
	public MyWindow()
	{
		init();
	}
	protected void init()
	{
		/*
			1.创建一个fram窗体
				窗体标题为:bigniu
		*/
		wMain=new Frame("bigniu");
		/*
			2.窗体进行布局
				初始化位置为屏幕上的坐标:(300,200)
				窗口的大小为:长495,宽400
				单位均为像素
				frame布局为流式布局,窗体内组件左对齐,窗体内组件间距横向20px,纵向25px
		*/
		wMain.setBounds(300,200,495,400);
		wMain.setLayout(new FlowLayout(FlowLayout.LEFT,20,25));
		/*
			3.添加组件
				Container:容器,具有可以添加其他组件的特性。
				Panel:画布,一般添加在frame中,可以添加其他组件并布局
				Dialog:对话框
				TextField:文本框
				TextArea:文本区域
				Button:按钮
				Label:文本标签
		*/

		inputDir=new TextField(40);
		content=new TextArea(15,60);
		btn=new Button("查询");
		
		mUp=new Panel(new BorderLayout(10,10));
		mUp.add(inputDir,BorderLayout.CENTER);
		mUp.add(btn,BorderLayout.EAST);

		mBotom=new Panel(new BorderLayout(10,10));
		mBotom.add(content,BorderLayout.CENTER);

		erroyDialog=new Dialog(wMain,"错误",true);
		erroyDialog.setBounds(300,200,200,130);
		erroyDialog.setLayout(new BorderLayout(10,10));
		erroyMessage=new Label();

		Panel p=new Panel(new FlowLayout(FlowLayout.RIGHT,10,10));
		erroyBtn_ok=new Button("确定");
		p.add(erroyBtn_ok);
		erroyDialog.add(erroyMessage,BorderLayout.CENTER);
		erroyDialog.add(p,BorderLayout.SOUTH);
		/*
			MenuBar:菜单栏
				通过frame的setMenuBar方法关联
			Menu:菜单
				MenuBar的Add方法可以为菜单栏添加菜单
				Menu中Add方法添加的是Menu及其子类控件
			MenuItem:选项,Menu的子类

		*/
		fileMB=new MenuBar();
		fileMenu=new Menu("文件");

		fmClose=new MenuItem("关闭");		
		fmOpen=new Menu("打开");
		fmOpenItem=new MenuItem[5];
		for(int i=0;i<5;i++)
		{
			fmOpenItem[0]=new MenuItem("file"+i);
			fmOpen.add(fmOpenItem[0]);
		}
		save=new MenuItem("保存");
		saveAs=new MenuItem("另存为");
		
		fileMenu.add(fmOpen);
		fileMenu.add(save);
		fileMenu.add(saveAs);
		fileMenu.add(fmClose);
		
		fileMB.add(fileMenu);
		wMain.setMenuBar(fileMB);
		
		wMain.add(mUp);
		wMain.add(mBotom);
		addEvent();
		/*
			4、设置窗体可见
		*/
		wMain.setVisible(true);
		
	}



	protected void btn_click()
	{

		if(inputDir.getText().length()==0)
			return;

		File dir=new File(inputDir.getText());

		if(!dir.isDirectory())
		{
			erroyMessage.setText("Dir:\""+inputDir.getText()+"\",不是一个有效的地址");
			erroyDialog.setVisible(true);
		}
		else
		{
			content.setText("");
			for(File f:dir.listFiles())
			{
				content.append(f.getName()+"\r\n");
			}
		}


	}

	protected void addEvent()
	{
		/*
			事件监听机制:
				1.事件源
				2.事件
				3.监听器
				4.事件处理
			1-3项有Java类库提供,已经封装好了只需调用即可,程序编写一般自作事件处理过程
		*/
		/*
			事件源:wMain(Frame组件)(已经封装好了添加监听器的方法)
			监听器:WindowListener(WindowAdapter是它的一个实现类)
			事件:WindowEvent
			事件处理:windowClosing(在该方法中添加对关闭窗口事件的处理过程)

		*/
		wMain.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		erroyDialog.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				erroyDialog.setVisible(false);
			}
		});
		erroyBtn_ok.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				erroyDialog.setVisible(false);
			}
		});
		btn.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				btn_click();
			}
		});
		inputDir.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e)
			{
				switch(e.getKeyCode())
				{
					case KeyEvent.VK_ESCAPE :
						inputDir.setText(" ");
						break;
					case KeyEvent.VK_ENTER :
						btn_click();
						break;
				}
			}
		});
	}

}

class AwtDemo
{
	public static void main(String[] args)
	{
		new MyWindow();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值