黑马程序员-Java基础-GUI编程

原创 2013年12月03日 09:52:44
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
 * GUI(Graphical user interface)图形用户接口
 * CLI(command line user interface)命令行用户接口,也就是常见的DOS命令行
GUI的组件对象都在Java.awt和javax.swing包。
l早期的java提供的GUI类库(java.awt)称之为Abstract Window Toolkit,即AWT,
AWT功能不是很好,不能很好的访问操作系统中高级的GUI特性,生成的程序外观很一般。
lSwing是JDK1.2以后提供的GUI类库,即:javax.swing,使用方便,界面更加美观。它提供的组件会在前面加上J以示区分,如Jframe.


GUI体系结构
 *                                  component
 *            |--container               |--button label checkbox 
 *     |--window       |--panel                         |-- textCompenent    
 * |--f rame   |--dialog                            |-- TextArea      |--TextField
 *             |--fileDialog
component是构件,位于最顶层。
container是容器,可以通过add()方法添加其他组件进来。用于放置其他组件,如:FrameJFrameApplet

布局管理器负责安排GUI组件的位置,java中布局管理器提供以下几种布局功能:

lFlowLayout:从左到右的次序放置组件;panel默认的布局
lBorderLayout:将容器的分成东、西、南、北、中5个区域;frame默认布局
lGridLayout:按行和列排列;
lBoxLayout:从左到右或从上到下放置组件;
lCardLayout:将组件重叠堆放;
GridBagLayout:与GridLayout类似,但组件的次序可变,并且能以任何次序添放组件.

 * 创建图形化界面:
* 1、创建f窗体
* 2、对窗体进行基本设置
*  比如大小,位置,布局
 * 3、定义组件
 * 4、将组件通过窗体的add()方法添加到窗体中
* 5、让窗体显示,通过setViserble(true)

 * 事件监听机制的特点:
 * 1、事件源:就是awt或Swing包中的图形界面组件
 * 2、事件:每一个事件源都有自己特有的对应事件和共性事件
 * 3、监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。
 * 4、事件处理
 * 前三者在Java中已经定义好了,直接获取其对象来用就可以。
 * 我们要做的事情,就是对产生的动作进行处理。
GUI 体系结构图如下:

awt包中组件结构和swing包中结构如下:

1、鼠标键盘监听事件代码演示:
package com.itheima.day22;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MouseAndKeyEvent 
{
	private Frame f;
	private Button but;
	private TextField tf;
	MouseAndKeyEvent()
	{
		init();
	}
	public  void init()
	{
		f = new Frame("my Frame");
		f.setBounds(300, 300, 500, 400);//设置组件,并调整其大小。距左边,距右边(设置位置),宽,高(设置大小)
		f.setLayout(new FlowLayout());//设置窗口布局为流式布局
		but = new Button("my button");
		tf = new TextField(20);//创建文本域
		f.add(tf);//将文本域添加进窗体中
		f.add(but);//将按钮添加进窗体中
		f.setVisible(true);//设置窗口可见
		
		myEvent();//加载监听事件
	}
	public void myEvent()
	{
		//窗口事件
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//活动事件
		but.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				System.out.println("Action ok ");
			}
			
		});
		//鼠标事件
		but.addMouseListener(new MouseAdapter()
		{
			private int count=0;
			private int clickcount=0;
			public void mouseEntered(MouseEvent e)
			{
				//System.out.println("鼠标进入事件"+count++);
			}
			public void mouseClicked(MouseEvent e)
			{
				if(e.getClickCount()==2)
					System.out.println("双击事件"+clickcount++);
				System.out.println("鼠标单击"+clickcount++);
			}
		});
		//键盘事件
		but.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
					System.exit(0);
			    /*	
			    if(e.isControlDown()&& e.getKeyCode()==KeyEvent.VK_ENTER)
				{
				//isControlDown()是inputEnvent(KeyEnvent的父类)中的方法
					System.out.println("ctrl+enter  is run ");
				}*/
				//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());
			}
		});
		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();
				}
			}
		});
		
	}
	public static void main(String[] args)
	{
          new MouseAndKeyEvent();
	}
	

}

2、输入框中输入盘符或文件地址,在下方文本域显示目录文件简单窗口演示,图如下:

代码如下:
package com.itheima.day22;

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class MyWindowTest 
{
	private Frame f;
	private TextField tf;
	private Button but;
	private TextArea ta;
	
	private Dialog d;
	private Label lab;
	private Button dbut; 
	
	MyWindowTest()
	{
		init();
	}
	public  void init()
	{
		f = new Frame("my Frame");
		f.setBounds(300, 300, 500, 400);
		f.setLayout(new FlowLayout());
		tf = new TextField(30);
		but = new Button("转到");
		ta = new TextArea(15,40);//行,列
		
		d = new Dialog(f,"提示信息",true);
		lab = new Label();
		dbut = new Button("确认");
		d.setBounds(200, 200, 300, 200);
		d.setLayout(new FlowLayout());
		d.add(lab);
		d.add(dbut);
        		
		f.add(tf);
		f.add(but);
		f.add(ta);
		f.setVisible(true);
		myEvent();
	}
	public void myEvent()
	{
		//窗口事件
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		d.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				d.setVisible(false);
			}
		});
		//活动事件
		but.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				showDir();
			}
		});
		dbut.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				showDir();
				d.setVisible(false);
			}
	    });
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				int code = e.getKeyCode();
				if(code==KeyEvent.VK_ENTER)
				{
					showDir();
				}
			}
		});
		
		
	}
	private  void showDir()
	{
		String dirPath = tf.getText();//TextField父类中的方法
		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 MyWindowTest();
	}
}

3、简单记事本程序演示:它具有打开文件,保存文件,如果是已经存在的文件,保存时不会弹出保存对话框。图片如下:

代码如下:
package com.itheima.day22;

import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class MyMenuTest 
{
	
	
	private Frame f;
	private MenuBar mb;
    private Menu m,submenu;
    private MenuItem subItem;
    private MenuItem openItem,saveItem,closeItem;
    private FileDialog opendia,savedia;
    private TextArea ta;
    private File file;
	MyMenuTest()
	{
		init();
	}
	public  void init()
	{
		f = new Frame("my Frame");
		f.setBounds(300, 300, 800, 500);
		//f.setLayout(new FlowLayout());如果不写布局就会默认边界布局,文本域全部填充
		mb = new MenuBar();
		m = new Menu("文件");
		submenu = new Menu("子菜单");
		subItem = new MenuItem("子条目");
		openItem = new MenuItem("打开");
		saveItem = new MenuItem("保存");
		closeItem = new MenuItem("退出");
		ta = new TextArea();
		
		opendia = new FileDialog(f,"打开文件",FileDialog.LOAD);
		savedia = new FileDialog(f,"保存文件",FileDialog.SAVE);
		
		m.add(submenu);
		submenu.add(subItem);
		
		m.add(openItem);
		m.add(saveItem);
		m.add(closeItem);
		mb.add(m);
		f.setMenuBar(mb);
		f.add(ta);
		
		f.setVisible(true);
		myEvent();
	}
	private void myEvent()
	{
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//打开目录事件
		openItem.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				opendia.setVisible(true);
				String dirPath = opendia.getDirectory();
				String filename = opendia.getFile();
				System.out.println(dirPath+"--"+filename);
				if(dirPath == null || filename == null)
					return ;
				ta.setText("");//当选择有效文件时,清空之前的内容
				File file = new File(dirPath,filename);
				try {
					BufferedReader bufr = new BufferedReader(new FileReader(file));
					String line = null;
					while((line=bufr.readLine())!=null)
					{
						ta.append(line+"\r\n");
					}
					bufr.close();
				} catch (IOException e1) {
					throw new RuntimeException("读取失败");
				}
				
			}
		});
		//保存目录事件
		saveItem.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				if(file==null)
				{
					savedia.setVisible(true);
					String dirPath = savedia.getDirectory();
					String filename = savedia.getFile();
					System.out.println(dirPath+"--"+filename);
					if(dirPath == null || filename == null)
						return ;
				    file = new File(dirPath,filename);
				}
				try {
					BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
					String text = ta.getText();
					bufw.write(text);
					bufw.flush();
					bufw.close();
				} catch (IOException e1) {
					throw new RuntimeException("保存文件失败");
				}
			}
		});
		closeItem.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e) 
			{
				System.exit(0);
			}
		});
		
	}
	public static void main(String[] args)
	{
         new MyMenuTest();
	}

}
--------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

                                               详细请查看:http://edu.csdn.net

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员 java基础24天 GUI编程学习总结

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- ...

黑马程序员-Java基础总结12——GUI编程

GUI编程 ------- android培训、java培训、期待与您交流! ---------- 一、基本概述: GUI   : Graphical User Interface(图形用户...
  • zms2100
  • zms2100
  • 2014年04月13日 04:41
  • 493

黑马程序员——高新技术---Java基础-GUI编程

Graphical User Interface(图形用户接口)。 用图形的方式,来显示计算机操作的界面,这样更方便更直观。   Java为GUI提供的对象都存在java.awt和javax.swin...

黑马程序员----java的GUI图形用户界面及编程基础

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、GUI-图形用户界面 1.什么是GUI,GLI GUI:Graphical User...
  • zlpiano
  • zlpiano
  • 2015年07月03日 00:47
  • 424

黑马程序员——基础学习(十四)多线程(Thread)和图形界面编程(GUI)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Thread(多线程) 同步方法及其锁对象 this 静态同步方法其锁对象 类名.class ...

黑马程序员—Java编程知识GUI知识总结

------- android培训、java培训、期待与您交流! ---------- JavaGUI技术总结。 一.GUI(图形化用户界面) 1.用来将文件或文件夹封装为对象。 2.方便对...

黑马程序员——java编程那些事儿____GUI概述

-------android培训、java培训、期待与您交流! ---------- 一 GUI概述         GUI Graphical User Int...

黑马程序员——java之GUI编程

------------android培训、java培训、期待与您交流! ------------- 1、GUI的概述: Graphical user Interface(图形化接口) ...

黑马程序员--------java GUI图形界面编程

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ GUI(图形用户界面) 1、GUI   *Graphical User...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员-Java基础-GUI编程
举报原因:
原因补充:

(最多只允许输入30个字)