黑马程序员_GUI

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

GUI:

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

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

它们之间的继承关系图:

分为组件和容器

黑马程序员_GUI_第1张图片

当我们进行窗体设计的时候,必须使用布局管理器对窗体进行整体的设计。

比较常见的组件排放方式:

1.   FlowLayout(流式布局管理器)

从左到右的排序排列

2.   BorderLayout(网格布局管理器)

东西南北中

3.   GridLayout(网格布局管理器)

规则的矩阵

下边学习一个特殊的容器:Frame(例子)


重要的部分:事件监听机制

1.   事件源(就是awt,swing包中的那些图形界面组件)

2.   事件(Event)(每个事件源都有自己的特有的对应事件和共性事件)

3.   监听器(Listener)(将可以触发某一个事件的动作都已经封装到了监听器中)

4.   事件处理(引发事件后处理方式,在监听器中处理)

 

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    public static void main(String[] args)
    {
	//创建了一个最初不可见的窗口实例
	Frame f = new Frame("my awt");
	
	//设置窗体的大小。
	f.setSize(200,400);
	
	//设置窗体的初始位置(与左上角的坐标位置)
	f.setLocation(200, 400);
	
	//设置其布局方式为流式布局
	f.setLayout(new FlowLayout());
	
	//增加一个按钮控件
	Button b = new Button("按钮");
	//将按钮增加到窗体上
	f.add(b);
	//这里设置为true,设置这个窗体为可见的。
	f.setVisible(true);
	
    }
}

事件监听机制的流程图(十分重要)

黑马程序员_GUI_第2张图片

监听器中对动作的处理可能不止一个。多个动作可能由一个监听器去处理。

事件练习1(窗体事件)

对窗体进行关闭:

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    public static void main(String[] args)
    {
	//创建了一个最初不可见的窗口实例
	Frame f = new Frame("my awt");
	//设置窗体的大小。
	f.setSize(200,400);
	//设置窗体的初始位置(与左上角的坐标位置)
	f.setLocation(200, 400);
	//设置其布局方式为流式布局
	f.setLayout(new FlowLayout());
	//增加一个按钮控件
	Button b = new Button("按钮");
	
	//将按钮增加到窗体上
	f.add(b);
	//增加事件监听器
	f.addWindowListener(new WindowAdapter(){
	   @Override
	public void windowClosing(WindowEvent e)
	{
	   System.exit(0);
	} 	    
	});
	//这里设置为true,设置这个窗体为可见的。
	f.setVisible(true);
	
    }
}



事件练习2(添加一个按钮,点击按钮退出程序)

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    //定义该图形中所需的组件的引用
    private Frame f;
    private Button but;
    public FrameDemo()
    {
	init();
    }
    public void init()
    {
	f = new Frame("my frame");
	//对frame进行基本设置
	f.setBounds(200,100,200,100);
	f.setLayout(new FlowLayout());
	
	but = new Button("my button");
	
	//将组件添加到frame中
	f.add(but);
	
	//加载一下窗体上的事件
	myEvent();
	
	//显示窗体
	f.setVisible(true);
	
    }
    //专门用于处理事件的函数
    private void myEvent()
    {
	f.addWindowListener(new WindowAdapter(){
	    @Override
	    public void windowClosing(WindowEvent e)
	    {
	       System.exit(0);
	    }
	});
	//给这个窗体添加一个退出按钮,具备退出程序的功能
	//按钮就是事件源。
	//想要知道哪个组件具备什么样的特有监听器。需要查看该组件对象
	//支持哪些监听。只有它自己知道。
	but.addActionListener(new ActionListener()
	{
	    public void actionPerformed(ActionEvent e)
	    {
		System.exit(0);
		
	    }
	});
    }
    public static void main(String[] args)
    {
	new FrameDemo();
    }
}



共性事件:(鼠标键盘事件,几乎所有的组件都具备)

addMouseListener

addKeyListener

监听鼠标按下的事件

 

  private void myEvent()
    {
	but.addMouseListener(new MouseAdapter()
	{
	    public void mouseClicked(MouseEvent e)
	    {
		System.out.println("鼠标点击");
	    }
	});
    }


//监听键盘按下的事件

private void myEvent()
    {
	but.addKeyListener(new KeyAdapter()
	{
	   @Override
	    public void keyPressed(KeyEvent e)
	    {
	       System.out.println(e.getKeyChar());
	    } 
	    
	});
}


对话框Dialog的实现

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{
    //定义该图形中所需的组件的引用
    private Frame f;
    private Button but;
    public FrameDemo()
    {
	init();
    }
    public void init()
    {
	f = new Frame("my frame");
	//对frame进行基本设置
	f.setBounds(200,100,200,100);
	f.setLayout(new FlowLayout());
	
	but = new Button("my button");
	
	//将组件添加到frame中
	f.add(but);
	
	//加载一下窗体上的事件
	myEvent();
	//显示窗体
	f.setVisible(true);
    }
    //专门用于处理事件的函数
    private void myEvent()
    {
	but.addKeyListener(new KeyAdapter()
	{
	   @Override
	    public void keyPressed(KeyEvent e)
	    {
	       if(e.getKeyChar()=='a')
	       {
		   Dialog d = new Dialog(f,"提示框",true);
		   //这里的true与false表示如果提示框出现,则能否对其他
		   //组件进行操作。
		   d.setBounds(200,200,200,300);
		   d.setLayout(new FlowLayout());
		   Label l = new Label();
		   l.setText("警告");
		   d.add(l);
		   Button b = new Button("确定");
		   b.addActionListener(new ActionListener()
		  {
		    public void actionPerformed(ActionEvent e)
		    {
			System.exit(0);
			//当点击确定按钮时候,退出程序。
		    }
		  });
		   d.add(b);   
		   d.setVisible(true);
	       }
	    }
	});
    }
    public static void main(String[] args)
    {
	new FrameDemo();
    }
}


菜单的效果(例)

import java.awt.*;
import java.awt.event.*;
public class FrameDemo
{	
    private Frame f;
    private MenuBar mb;
    private Menu m;
    private Menu subMenu;
    private MenuItem closeItem;
    private MenuItem subItem;
    public FrameDemo()
    {
	init();
    }
    public  void init()
    {
	f = new Frame("my window");
	f.setBounds(200,100,400,500);
	f.setLayout(new FlowLayout());
		mb = new MenuBar();
	m = new Menu("file");
	subMenu = new Menu("子菜单");
	subItem = new MenuItem("子条目");
	closeItem = new MenuItem("退出");
	m.add(closeItem);
	subMenu.add(subItem);
	m.add(subMenu);
	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);
	    }
	});
    }
    public static void main(String[] args)
    {
	new FrameDemo();
    }
}


jar包双击执行的操作:

修改jar包下MANIFEST.MF文件,配置其主函数

例如

Manifest-Version:1.0

Main-Class:frame.FrameDemo

你可能感兴趣的:(黑马程序员_GUI)