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

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
GUI
      Graphical User Interface(图形用户接口)。
   用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI
   Command line User Interface (命令行用户接口)
就是常见的Dos命令行操作。
    需要记忆一些常用的命令,操作不直观。
举例:比如:创建文件夹,或者删除文件夹等
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
Awt和Swing 
     java.Awt: Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
     javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻      量级控件。
继承关系图:


Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1)FlowLayout(流式布局管理器)
   从左到右的顺序排列。
Panel默认的布局管理器。
2)BorderLayout(边界布局管理器)
   东,南,西,北,中,Frame默认的布局管理器。
3)GridLayout(网格布局管理器)
   规则的矩阵
4)CardLayout(卡片布局管理器)
   选项卡
5)GridBagLayout(网格包布局管理器)
   非规则的矩阵

建立一个简单的窗体
 Container常用子类: Window Panel(面板,不能单独存在。)
 Window常用子类: Frame Dialog
简单的窗体创建过程:
1) Frame f = new Frame(“my window”);
2)f.setLayout(new FlowLayout());
3)f.setSize(500,400);//设置窗体大小
4)f.setLocation(300,200);//设置窗体出现在屏幕的位置
5)f.setVisible(true);

事件监听机制组成:
事件源(组件)、 事件( Event)、监听器( Listener)、事件处理(引发事件后处理方式)
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。
事件监听机制流程图:


事件监听机制
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者, getComponent()获取。)
例子: 在文本框中输入目录,点击“转到”按钮,将该目录中的文件 与文件夹名称列在下面的文本区域中。


import java.awt.*;
import java.awt.event.*;
import java.io.*;
class  MyWindowDemo
{
	private Frame f;//定义窗体
	private TextField tf;//定义文本框
	private Button but;//定义按钮
	private TextArea ta;//定义涉及到的组件
	private Dialog d;
	private Label lab;
	private Button okBut;

	MyWindowDemo()//定义一个构造函数
	{
		init();
	}
	public void init()//对外提供方法
	{
		f = new Frame("my window");
		f.setBounds(300,100,600,500);//(距左边的距离。距上面的距离,宽、高)
		f.setLayout(new FlowLayout());//设置布局管理,默认边界布局,此时流布局
		tf = new TextField(60);//60为列数
		but = new Button("转到");
		ta = new TextArea(25,70);//文本区域既能指定行,又能指定列(行,列)
	    d = new Dialog(f,"提示信息-self",true);//构造一个最初不可见的dialog
		d.setBounds(400,200,240,150);
		d.setLayout(new FlowLayout());
		lab = new Label();
		okBut = new Button("确定");
		d.add(lab);
		d.add(okBut);
		f.add(tf);
		f.add(but);
		f.add(ta);
		myEvent();
		f.setVisible(true);
	}
	private void  myEvent()
	{

		okBut.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				d.setVisible(false);
			}
		});
		d.addWindowListener(new WindowAdapter()//定义一个窗口监听
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);
			}
		});

		tf.addKeyListener(new KeyAdapter()//定义一个按键监听
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					showDir();
			}
		});

        but.addActionListener(new ActionListener()//添加Action监听
		{
			public void actionPerformed(ActionEvent e)
			{
				showDir();
				
			}
		});

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

	private void showDir()//定义一个功能函数
	{
		String dirPath = tf.getText();//获取文本
				
		File dir = new File(dirPath);

		if(dir.exists() && dir.isDirectory())
		{
			ta.setText("");
			String[] names = dir.list();
			for(String name : names)
			{
				ta.append(name+"\r\n");
			}
		}
		else
		{
			String info = "您输入的信息:"+dirPath+"是错误的。请重输";//错误使的提示信息
			lab.setText(info);
			d.setVisible(true);
		}
	}

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

菜单继承体系:

菜单
 MenuBar,Menu,MenuItem
先创建菜单条,再创建菜单,每一个菜单中建立菜单项。也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。


import java.awt.*;
import java.awt.event.*;
class MyMenuDemo 
{
	private Frame f;
	private MenuBar mb;
	private Menu m,subMenu;
	private MenuItem closeItem,subItem;

	MyMenuDemo()
	{
		init();
	}
	public void init()
	{
		f = new Frame("my window");
		f.setBounds(300,100,500,600);
		f.setLayout(new FlowLayout());
		mb = new MenuBar();//菜单条
		m = new Menu("文件");//菜单,menu后有箭头,可添加子条目
		subMenu = new Menu("子菜单");
		subItem = new MenuItem("子条目");
		closeItem = new MenuItem("退出");
		subMenu.add(subItem);

		m.add(subMenu);
		m.add(closeItem);
		mb.add(m);

		f.setMenuBar(mb);
        myEvent();
		f.setVisible(true);
	}
	private void myEvent()//添加事件
	{

		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);	
			}
		});
	}
	
	public static void main(String[] args) 
	{
		new MyMenuDemo();
	}
}













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值